Bonjour à tous.
Je développe en ce moment un web service REST pour l'upload de fichier.
Je dispose d'un service rest en wcf avec la méthode suivant :
Pour le moment je n'accorde pas d'importance à l'emplacement et au nom du fichier reçu. Le service est configuré en TransferMode = Streaming avec les propriétés MaxReceivedMessageSize et MaxBufferSize intitialisées au maximum (int.MaxValue et long.MaxValue).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public string Post(Stream stream) { using (FileStream targetStream = new FileStream(@"D:\test", FileMode.Create, FileAccess.Write, FileShare.None)) { const int bufferLen = 1024; byte[] buffer = new byte[bufferLen]; int count = 0; while ((count = stream.Read(buffer, 0, bufferLen)) > 0) { targetStream.Write(buffer, 0, count); } targetStream.Close(); stream.Close(); } return "success"; }
Mon problème est que le stream reçu par le service est corrompu. Il est correctement sauvegardé mais illisible quelque soit son type excepté pour les archives ZIP.
Après quelque recherche je me suis rendu compte que lorsque j'ouvrai mon fichier sauvegardé avec notepad, il contenais une en-tête de la forme
------WebKitFormBoundary
Content-Disposition: form-data; name="data"; filename="DSCF0001.JPG"
Content-Type: image/jpeg
<file bytes>
------WebKitFormBoundary--
Et que lorsque je supprime ce contenu superflu, le fichier s'ouvre correctement.
Voici le code de la page html depuis laquelle j'effectue l'upload des fichiers :
En cherchant un peu sur google je suis tombé sur ce post : http://stackoverflow.com/questions/7...form-data-post
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <form id="file_upload_form" method="post" enctype="multipart/form-data" action="http://localhost:56433/UploadService.svc/Post"> <input type="file" name="file" id="uploadcv" size="30" /> <input type="submit" value="Upload"/> </form>
Qui ne m'a guère aidé car il "trimme" en quelque sorte le stream afin de retirer le contenu superflu. Mais ne fonctionne pas avec des fichiers lourd (OutOfMemoryException).
Si quelq'un a une idée.
Merci d'avance.
Partager