【问题标题】:Flurl AddFile fileName EncodingFlurl AddFile 文件名编码
【发布时间】:2017-11-25 21:51:03
【问题描述】:

我尝试使用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=?="

有什么建议吗?

【问题讨论】:

  • 请贴出ConvertToAcsii方法的定义。
  • 抱歉混淆了,他是空的:private string ConvertToAcsii(string str) { return str; }
  • 我在入口处有标准的 C# utf8 字符串

标签: c# utf-8 flurl


【解决方案1】:

文件名似乎使用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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多