2017-06-23 4 views
0

Je joue avec les extensions Chrome. Mon extension a une simple fenêtre contextuelle avec un bouton qui lit un fichier de Chrome FileSystem et POST ce fichier sur un WebAPI de base .net.Comment poster le fichier HTML5 fileEntry à .net core web api?

function requestUpload() { 
    window.requestFileSystem(window.PERSISTENT, 5 * 1024 * 1024, 
    function (fs) { 
     fs.root.getFile('ciccio.txt', {}, function (fileEntry) { 

     // Get a File object representing the file, 
     fileEntry.file(function (files) { 

      let xhr = new XMLHttpRequest(); 
      xhr.open("post", "http://localhost:5000/api/Files/UploadFiles", true); 
      xhr.setRequestHeader("Content-Type", "multipart/form-data"); 
      xhr.setRequestHeader("X-File-Name", files.name); 
      xhr.setRequestHeader("X-File-Size", files.size); 
      xhr.setRequestHeader("X-File-Type", files.type); 
      xhr.send(files); 
     }, errorHandler); 

     }, errorHandler); 
    }, errorHandler); 
} 

Mon action WebAPI suit:

[HttpPost("UploadFiles")] 
public async Task<IActionResult> Post(IFormFile files) 
{ 
    return Ok(); 
} 

télécharger le fichier que j'obtiens cette exception:

System.IO.InvalidDataException: Missing content-type boundary. 

Comment puis-je résoudre ce problème?

Merci

+0

Essayez d'utiliser FormData: [envoyer un fichier comme multipart par xmlHttpRequest] (// stackoverflow.com/a/9397172) – wOxxOm

Répondre

0

Votre getFile() pour obtenir le fichier, retourne un objet de fichier.

fs.root.getFile('ciccio.txt', {}, function (fileEntry) { 

XMLHttpRequest.send() a les suivantes: les surcharges

void send(); 
void send(ArrayBuffer data); 
void send(Blob data); 
void send(Document data); 
void send(DOMString? data); 
void send(FormData data); 

objet File est de type Blob seulement, il devrait donc aussi work.But il ressemble asp.net core may not work, this, this correctement si vous ne réglez pas la Entête Type de contenu avec la frontière correcte. Je pense que l'utilisation de formdata fonctionnera correctement.

S'il vous plaît essayer de suivre et vous n'avez pas besoin de définir l'en-tête de type de contenu multipart

var formData = new FormData(); 
formData.append("file", file); 
xmlHttpRequest.send(formData); 
+0

Ça marche. Merci beaucoup. – ilMattion