2014-09-22 79 views
2

我試圖使用該指令的文件上傳到sails.js應用服務器: ng-file-upload上傳與NG-文件上傳指令文件到sails.js服務器

我的客戶端上傳的已選定的圖像是這樣的:

$upload.upload({ 
     url:'upload/item-image', 
     headers:{ 
      'Content-Type': 'multipart/form-data' 
     }, 
     data:{blah:'blah'}, 
     file: $scope.uploadFile, 
     fileName:$scope.uploadFile.name 
    }).success(function(data){ 
     console.log(data); 
    }).error(function(err){ 
     console.log(err); 
    }); 
處理該服務器上上傳

而且我sails.js控制器的方法開始是這樣的:

upload: function (req, res) { 
    req.file('item-image').upload(function (err, files) { 
     if (err) 
      return res.serverError(err); 
     if(!files.length) 
      return res.serverError('No files received for upload.'); 

     var file = files[0]; 
    ... 
    } 
... 
} 

^h無論如何,當服務器函數被調用,並且body上的json數據存在時,沒有任何文件被req.file('不管這裏放的是什麼')回調找到。

在此先感謝。

+0

我對風帆不熟悉,但我有一個類似的情況與快遞,我最終通過配置一箇中間件來處理請求上的文章/文件,我使用了busboy,也許你可以找到類似的風帆方法 – 2014-09-22 15:12:18

+1

我猜你沒有給'req.file()'正確的參數,即文件正在上傳的字段的名稱。這絕對不是'物品形象'。你有沒有試過'req.file('file')'? – sgress454 2014-09-22 17:40:27

+0

雖然我終於找到了自己,但你的解決方案是正確的@ sgress454。請將它寫成完整答案,以便我可以將其標記爲這樣。 – SirDemon 2014-09-22 20:02:43

回答

7

req.file的參數需要是Sails查找上傳文件的請求中的字段名稱。如果你正在做的東西,如一個簡單的HTML表單:

<input type="file" name="myFileField" /> 

然後在你的控制器代碼,你將有:

req.file('myFileField').upload(...); 

隨着載部件像這個問題,可以參考的ng-file-upload部件有時候要弄清楚這個字段的名稱有點棘手。默認

//fileFormDataName: myFile, // or a list of names for multiple files (html5). 
          // Default is 'file' 

,您可以設置fileFormDataName改變上傳字段的名稱,否則它file:在這種情況下,它隱藏在usage instructions

如果您無法在文檔中查找字段名稱或通過檢查HTML,最簡單的方法就是上傳(即使不成功),然後使用Chrome中的開發人員工具檢查網絡請求:

enter image description here

這是從角文件上傳演示頁。你可以在右下角看到name="myFile";這就是你要找的。在這種情況下,文件字段被稱爲myFile

0

一件重要的事情,如果你要處理多個文件在後端使用:

req.file('files').upload({...});

你需要添加arrayKey: ''參數在Upload.upload({})這樣的:

Upload.upload({ 
    url: 'http://localhost:1337/uploads', 
    arrayKey: '', 
    data: { 
    files: files 
    }