2017-06-22 1 views
0

J'essaie d'utiliser flurl pour envoyer un fichier comme celui-ci:Flurl AddFile fileName encodage

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"

Mais dans la méthode de post, je reçois ceci:

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

Toutes les suggestions?

+0

S'il vous plaît la définition de publier la méthode ConvertToAcsii. –

+0

Désolé confondre, son vide: private string ConvertToAcsii (string str) { retour str; } – EKostan

+0

J'ai une chaîne C# utf8 standart à l'entrée – EKostan

Répondre

2

Le nom du fichier semble être codé en utilisant la syntaxe MIME encoded-word. (Flurl ne le fait pas directement, il se passe probablement plus profondément dans les bibliothèques HttpClient lorsque des caractères non-ASCII sont détectés.) .NET doesn't directly support decoding this format, mais vous pouvez le faire vous-même assez facilement. Si vous déposez le =?utf-8?B? depuis le début et ?= depuis la fin, ce qui vous reste est votre nom de fichier encodé en base64.

est ici une façon que vous pouvez le faire:

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