【发布时间】:2014-10-01 17:31:39
【问题描述】:
开发测试环境:
- Windows 8 64 位
- 节点版本安装0.10.5
- npm 版本 1.2.18
- 表达框架
- 用于文件上传的强大模块
- Firefox 和 Internet Explorer 浏览器
HTML 代码:
<form id="caricaMasterImg" method="post" enctype="multipart/form-data" action="/image/upload">
<input type="file" id="masterImg" name="masterImg" value="Sfoglia" accept="image/*"/>
<input type="submit" value="carica" id="submitLoadImg" />
</form>
app.js 代码:
var image = require('./route/image');
app.post('/image/upload', image.upload);
routes/image.js 代码:
exports.upload = function(req, res){
var form = new formidable.IncomingForm();
form.uploadDir = path.join(__dirname, 'tmp');
console.log('Upload directory is: '+form.uploadDir);
fs.exists(form.uploadDir, function (exists) {
console.log('is an existing directory? '+exists);
});
form.parse(req, function(err, fields, files) {
console.log(fields);
console.log(files);
});
};
问题:
单击提交按钮时,我希望看到使用 console.log(files) 指令记录的文件。日志写入:
上传目录为:C:\Liber-I\app\FileSystemManager\routes\tmp 是现有目录吗?真的
没有更多的日志被写入应用程序控制台几分钟。 我测试了无文件提交的情况,似乎它的行为相同!这是一个太奇怪的行为而不是 nodejs 问题,我在哪里做错了?
【问题讨论】:
-
不熟悉强大的,但为什么不使用 connect-multiparty 或 connect-busboy 因为它们是由 express官方支持的>:github.com/senchalabs/…
-
在
/image/upload路由之前你使用的是什么中间件? -
@mscdex 我想我在 /image/upload 之前没有使用其他中间件,但我不确定我是否正确地得到了你的问题。
-
@Jordonias 我采纳了您的建议并尝试使用连接多方。我需要更多地测试我的代码,但现在上传的文件在我的路由函数上记录为 JSON 对象(如预期的那样),物理上上传到默认上传文件夹中。我想设置一个不同的上传目录:
var myPath = path.join(__dirname,'/tmp'); var multipart = require('connect-multiparty'); var multipartMiddleware = multipart({uploadDir : myPath});,但仍使用默认文件夹。 -
我的意思是,在该路由之前,您必须拥有某种支持多部分的正文解析中间件
use()d。
标签: node.js express image-uploading formidable