Flurl AddFile 文件名编码

Flurl AddFile fileName Encoding

我尝试使用 flurl 发送这样的文件:

public ImportResponse Import(ImportRequest request, string fileName, Stream stream)
    {
        request).PostAsync(content).Result<ImportTariffResponse>();

        return FlurlClient(Routes.Import, request).PostMultipartAsync(mp => mp.AddJson("json", request).AddFile("file", stream, ConvertToAcsii(fileName))).Result<ImportResponse>();
    }

fileName = "Файл импорта тарифов (1).xlsx"

但是在 post 方法中我得到了这个:

Request.Files.FirstOrDefault().FileName = "=?utf-8?B?0KTQsNC50Lsg0LjQvNC/0L7RgNGC0LAg0YLQsNGA0LjRhNC+0LIgKDEpLnhsc3g=?="

有什么建议吗?

文件名似乎是使用 MIME encoded-word syntax. (Flurl doesn't do this directly, it presumably happens deeper down in the HttpClient libraries when non-ASCII characters are detected.) .NET doesn't directly support decoding this format 编码的,但您可以自己轻松完成。如果你从开头去掉 =?utf-8?B? 并从结尾去掉 ?=,你剩下的就是你的文件名 base64 编码。

这是您可以做到的一种方法:

var base64 = Request.Files.FirstOrDefault().FileName.Split('?')[3];
var bytes = Convert.FromBase64String(base64);
var filename = Encoding.UTF8.GetString(bytes);