文件上传缺少路径属性

时间:2015-04-19 18:24:39

标签: javascript node.js file-upload

我已经在网上寻找答案,但我没有运气。

我想将文件上传到运行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 个答案:

答案 0 :(得分: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);
        });

 });

在上面的代码中,您可以使用---&gt;获取文件名。 files.myFile [0] .ws.path

并使用-----&gt;文件获取数据数据