【发布时间】:2015-03-03 08:47:57
【问题描述】:
我正在使用Multer 在 Express 4 中上传图像。但是,这些示例都显示 Multer 在 express 文件中被定义为中间件。我想在我的应用程序路由本身中定义一些 Multer 行为。这可能吗?我需要的最终结果是让我的路由函数在将服务器响应发送到浏览器之前识别上传何时完成,因此可以向用户显示图像(现在我只显示部分图像,因为文件尚未完成上传)。
当前的工作代码
express.js
// Require Multer as module dependency.
var multer = require('multer');
// Using Multer for file uploads.
app.use(multer({
dest: './public/profile/img/',
limits: {
fieldNameSize: 50,
files: 1,
fields: 5,
fileSize: 1024 * 1024
},
rename: function(fieldname, filename) {
return filename;
},
onFileUploadStart: function(file) {
if(file.mimetype !== 'image/jpg' && file.mimetype !== 'image/jpeg' && file.mimetype !== 'image/png') {
return false;
}
}
}));
server_routes.js
app.route('/users/image').post(server_controller_file.imageUpload);
server_controller_file.js
exports.imageUpload = function(req, res) {
// Check to make sure req.files contains a file, mimetypes match, etc., then send appropriate server response.
};
理想情况下,我的 server_controller_file.js 将包含一些检查以确保文件完成上传,例如(注意:这是假设的/理想的,不是实际的工作代码)...
var multer = require('multer');
exports.imageUpload = function(req, res) {
multer({
onFileUploadComplete: function(file) {
res.send();
}
});
}
同样,现在节点的异步特性导致浏览器在收到成功响应后立即认为上传完成,因此当我更新 url 以显示图像时,它只显示部分。感谢您的帮助!
【问题讨论】:
-
你能在 onFileUploadComplete 函数中得到
file.path吗? -
因为
multer作为中间件工作,我认为它在你的server_controller_file中不起作用。所以你不知道它何时完成上传文件。看这个例子:codeforgeek.com/2014/11/file-uploads-using-node-js -
@RyanYiada 我可以在 onFileUploadComplete 函数中访问 file.path,但它仍然无法与我的路由器通信。您链接到的文章很好 - 它有一个变量“完成”,它在中间件和路由器的范围内,但由于我的中间件和路由器位于不同的文件中,我的中间件变量超出了路由器的范围。跨度>
-
@aikorei,express.js 是主服务器文件对吗?
-
@shankarmsr 不,有一个单独的 server.js 文件可以启动所有内容,并包含 express.js 文件。
标签: javascript express meanjs multer