Flurl AddFile fileName编码

时间:2017-06-22 14:32:07

标签: c# utf-8 flurl

我尝试使用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 2 B 4 0KTQsNC50Lsg0LjQvNC / 0L7RgNGC0LAg0YLQsNGA0LjRhNC + 0LIgKDEpLnhsc3g =?=”

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

文件名似乎使用MIME encoded-word语法编码。 (Flurl不会直接执行此操作,当检测到非ASCII字符时,它可能会在HttpClient库中发生更深层次。).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);