1

Je suis en train d'écrire un service de téléchargement de fichiers en utilisant Resumeable.js (client) et C# MVC/WebAPI (Server). Sur le côté client, Resumeable.js crée un blob pour le fichier téléchargé et construit une requête multi-parties pour envelopper certaines informations de fichier (nom, taille, etc.) avec le blob. Du côté serveur, nous utilisons ReadAsMultipartAsync() pour analyser la requête multipart et utiliser ReadAsByteArrayAsync() pour obtenir un octet du fichier.C# ReadAsByteArrayAsync résultat différent des données brutes et conduit à la corruption de fichiers

var parts = await Request.Content.ReadAsMultipartAsync(); 
... 
// if parts contains file 
request.ChunkContent = currentPart.Contents.ReadAsByteArrayAsync().Result; 

Il fonctionne très bien pour le fichier texte brut, cependant, quand je télécharge un fichier .docx 12KB utilisant ce service de téléchargement de fichiers, le tableau d'octets retourné par ReadAsByteArrayAsync() est différent des données de fichiers brutes, le premier 16 Les octets sont les mêmes et la taille du tableau est augmentée à 18000+. J'ai vérifié que les octets que nous avons envoyés au serveur sont tous corrects dans Fiddler. L'utilisation de l'encodage utf-8 ne résout pas le problème, quelqu'un a-t-il déjà rencontré le même problème auparavant?

+0

Essayez attendre plutôt que .Result –

Répondre

0

Dans mon projet j'utilise le framework IdentityServer3, et récemment j'ai mis à jour vers la version 2.6.0, et depuis lors le problème a commencé.

Si c'est votre cas, passez à la version 2.5.0.

+0

Nous n'utilisons pas ce cadre, ne sais toujours pas ce qui interfère avec les données. Nous finissons par utiliser une chaîne basée sur 64 au lieu de données binaires brutes comme solution de contournement. – yyc