Кодировка имени файла Flurl AddFile

Я пытаюсь использовать 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=?="

Какие-либо предложения?


person EKostan    schedule 22.06.2017    source источник
comment
Пожалуйста, опубликуйте определение метода ConvertToAcsii.   -  person Todd Menier    schedule 22.06.2017
comment
Извините, что путаю, он пустой: private string ConvertToAcsii(string str) { return str; }   -  person EKostan    schedule 23.06.2017
comment
У меня на входе стандартная строка C# utf8   -  person EKostan    schedule 23.06.2017


Ответы (1)


Похоже, что имя файла закодировано с использованием синтаксиса MIME encoded-word. (Flurl не делает этого напрямую, предположительно это происходит глубже в библиотеках HttpClient при обнаружении символов, отличных от ASCII.) .NET напрямую не поддерживает декодирование этого формата, но вы можете легко сделать это самостоятельно. Если вы удалите =?utf-8?B? с начала и ?= с конца, то, что у вас останется, это ваше имя файла в кодировке base64.

Вот один из способов сделать это:

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