我已经在网上寻找答案,但我没有运气。
我想将文件上传到运行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
属性。有什么建议吗?
答案 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;文件获取数据数据