2017-04-11 142 views
0

我想上傳文件到WebApi,但我沒有收到文件。此外,我不知道如果該文件正在追加。此外上傳文件(FormData)到WebApi

if (this.state.file) { 
      var file = this.state.file; 
      if (window.FormData !== undefined) { 
       var data = new FormData(); 
       data.append("file", file); 

       $.ajax({ 
        type: "POST", 
        url: "/api/service/upload", 
        contentType: "text/csv", 
        processData: false, 
        data: data, 
        success: function (result) { 
         console.log(result); 
        }, 
        error: function (xhr, status, p3, p4) { 
         var err = "Error " + " " + status + " " + p3 + " " + p4; 
         if (xhr.responseText && xhr.responseText[0] == "{") 
          err = JSON.parse(xhr.responseText).Message; 
         console.log(err); 
        } 
       }); 
      } 
     } 

,檢查我的請求負載的內容,我想這一點,而不是Ajax調用:我這樣做

   var xhr = new XMLHttpRequest; 
       xhr.open('POST', '/', true); 
       xhr.setRequestHeader('Content-Type', 'text/csv'); 
       xhr.send(data); 

而且只出現:

------ WebKitFormBoundary6xZnDkSOxBAxaovA內容處理:form-data; NAME = 「文件」;文件名= 「Teste.csv」 內容類型: 應用程序/ vnd.ms - Excel中

------ WebKitFormBoundary6xZnDkSOxBAxaovA--

+0

嘗試從ajax調用中去除'contentType'選項。而且,請驗證'this.state.file'是一個文件對象而不是文件對象的數組。 'console.log'。 – TipuZaynSultan

+0

我得到這個(我猜是一個文件對象): File {name:「Teste.csv」,lastModified:1491903259490,lastModifiedDate:2017年4月11日上午10:34:19 GMT + 0100(GMT Daylight Time),webkitRelativePath: 「」,尺寸:32 ...} 上次更改 : lastModifiedDate : 星期二2017年4月11日10點34分19秒GMT + 0100(GMT夏令時間) 名 : 「Teste.csv」 大小 : 類型 : 「application/vnd.ms-excel」 webkitRelativePath : 「」 __proto__ : 文件 –

+0

但是,我追加到FormData對象的文件後,該對象只有原型,是否正常?裏面不應該有一個File對象? –

回答

0

如果文件大小不是很大,你可以使用的base64編碼。將編碼的字符串數據發送到web api服務。解碼並使用它。

+0

我如何獲取並編碼文件的內容? –

+0

基本示例[this](http://jsfiddle.net/eliseosoto/JHQnk/)。 – daylight

0

好的,你有一個文件對象,它看起來是正確的。試試下面的代碼。

var file; // Assuming this is the file object. 
var formData = new FormData(); 
formData.append('file', file); 

$.ajax({ 
    type : 'POST', 
    url : '/api/service/upload', 
    data : formData, 
    dataType : 'json', // json, html whatever you like. 
    contentType: false, // Change this line 
    processData: false 
}).done(function(res) { 
    console.log(res); 
}).fail(function(res) { 
    console.log(res.responseText); 
}); 

如果您在api服務中使用PHP。您應該可以使用print_r($_FILES)並在那裏看到該文件。

希望這會有所幫助。