2017-06-23 83 views
0

我在玩Chrome擴展。我的擴展有一個簡單的彈出窗口,其中包含一個按鈕,用於從Chrome文件系統讀取文件並將該文件發佈到.net核心WebAPI。如何將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); 
} 

我的WebAPI動作如下:

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

上傳文件我得到這個異常:

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

我怎樣才能解決這個問題呢?

謝謝

+0

嘗試使用FORMDATA:通過XMLHttpRequest的發送文件爲多(// stackoverflow.com/a/9397172) – wOxxOm

回答

0

你的getFile()調用來獲取文件,返回一個文件對象。

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

XMLHttpRequest.send()具有以下重載:

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

File對象僅是BLOB類型,所以它也應該work.But它看起來像asp.net core may not workthisthis如果正確,您沒有設置內容類型標題與正確的邊界。我認爲使用formdata將正常工作。

請嘗試以下,你不需要設置多內容類型頭

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

有用。萬分感謝。 – ilMattion

相關問題