2017-06-22 98 views
0

我尝试使用flurl发这样的文件:Flurl AddFile文件名编码

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>(); 
    } 

文件名= “Файлимпортатарифов(1)的.xlsx”

但在POST方法我得到这样的:

Request.Files.FirstOrDefault()。文件名= “=?UTF-8 2 B 4 0KTQsNC50Lsg0LjQvNC/0L7RgNGC0LAg0YLQsNGA0LjRhNC + 0LIgKDEpLnhsc3g =?=”

有什么建议吗?

+0

请张贴ConvertToAcsii方法的定义。 –

+0

很抱歉,他的空:private string ConvertToAcsii(string str) { return str; } – EKostan

+0

我在入口处有标准的C#utf8字符串 – EKostan

回答

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);