2015-04-19 155 views
0

我已經搜遍網絡尋找這個答案,但我沒有運氣。文件上傳缺少路徑屬性

我想將文件上傳到運行Node JS的服務器並將文件保存在服務器端的任意文件夾中。

一切似乎工作得很好。

我的客戶POST代碼(使用拖放):

var files = event.dataTransfer.files; 

var xhr = new XMLHttpRequest(); 
xhr.open('POST', '/upload', true); 
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 

xhr.send(JSON.stringify(files)); 

服務器端的POST處理程序:

app.post('/upload', function(req, res) { 
    require('fs').rename(
     req.body.path, 
     '/uploads' + serverPath, 
     function(error) { 
      if (error) { 
       res.send({ 
        error: 'Something bad happened!' 
       }); 
       return; 
      } 

      res.send({ 
       path: serverPath 
      }); 
     } 
    ); 
}); 

但是服務器端代碼失敗。爲什麼?那麼答案很簡單。在大多數的使用情況我見過,文件path屬性讀取POST請求,我發送到服務器看起來是這樣的:

{ 
    webkitRelativePath: '', 
    lastModified: 1429402697000, 
    lastModifiedDate: '2015-04-19T00:18:17.000Z', 
    name: 'sample.zip', 
    type: 'application/zip', 
    size: 317256 
} 

我不能在Mac上獲得Chrome瀏覽器進行一個path屬性。有什麼建議麼?

回答

1

您可以在客戶端

<form name="myform" data-validate="parsley" enctype="multipart/form-data" method="post" action="http://<host>:<port number>/upload" target="upload"> 
<input id="uploadImage" type="file" style="display:none" name="myFile" /> 
<br/> 
<a onclick="$('input[id=uploadImage]').click();">Select File</a> 

    <input type="submit" id="submit_button" value="Submit"/> 
</form> 

使用使用此代碼之後,在服務器端代碼

安裝這些模塊,並使用在上面的代碼如下

var multiparty = require('multiparty'); 
    var http = require('http') 
    var util = require('util') 
var form = new multiparty.Form(); 
form.parse(req, function(err, fields, files) { 
     var fs = require('fs'); 
     fs.readFile(files.myFile[0].ws.path, function (err, data) { 
      console.log("File data"+data); 
      console.log("FileName--->"+files.myFile[0].ws.path); 
     }); 

}); 

你可以得到文件名稱與---> files.myFile [0] .ws.path

和文件獲取數據----->數據