我正在使用DropZone将文件上传到我的nodejs服务器。但是,当帖子命中我的nodejs服务器时,我无法弄清楚如何获取文件句柄。这是我在html中实例化DropZone的方法:
<form action="/file-upload" class="dropzone" id="logoDropZone">
<input type="hidden" name="userName" value="user"/>
</form>
然后,在我的nodejs服务器中,我有以下代码:
app.post('/file-upload', function (request, response) {
console.log("Route: '/file-upload' ");
console.log("File upload request from user: " + request.body.userName);
// Get a file handle, read the file and then write it out to the file system.
...
});
我可以看到这段代码正在执行。我还可以通过请求对象访问输入字段中的值(请参阅隐藏的输入)。但是,如何访问文件本身以便将其写入服务器文件系统?
答案 0 :(得分:2)
我找到了这个问题的答案。以下代码将文件上载到服务器:
app.post('/file-upload', function (request, response) {
fs.readFile(request.files.file.path, function(err, data) {
var newPath = __dirname + "/public/img/xspectra/customlogo.png";
fs.writeFile(newPath, data, function (err) {
console.log("Finished writing file..." + err);
response.redirect("back");
});
});
});
为了让其他人不会遇到同样的问题,我会解释一下我做错了什么:
1)虽然表单元素没有“name”属性,但是可以通过名称“file”在节点请求对象中访问文件。这可以在上面的代码中看到:
request.files.file.path
其中:'file'是表单的“名称”。
2)此代码在以下网站上找到(为了给予赞扬并在下面提供建设性的批评):http://howtonode.org/af136c8ce966618cc0857dbc5e5da01e9d4d87d5/really-simple-file-uploads
虽然我非常感谢所有者创建文档,但它可以使用一些改进来减少混淆。主要是,需要更新文档以明确解释上面的点号“1)”。