请考虑包含更多最新信息的更新答案,因为这些年来情况发生了变化!
由于许多新的Node.js库很快就被淘汰了,而且相对较少的示例,我想问一下如何使用以下工具上传图像:
(1.1.0)。
其他人是怎么做到的?
我已经找到了:node-formidable,但我对上传图片还是个新手,所以我想学习一些通用的东西,以及使用Node.js和Express上传图片的方法。
发布于 2011-03-01 09:35:51
我将第一次回答我自己的问题。我直接从源代码中找到了一个例子。请原谅不好的缩进。我不确定在复制和粘贴时如何正确缩进。代码直接来自GitHub上的Express multipart/form-data
example。
// Expose modules in ./support for demo purposes
require.paths.unshift(__dirname + '/../../support');
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, form = require('connect-form');
var app = express.createServer(
// connect-form (http://github.com/visionmedia/connect-form)
// middleware uses the formidable middleware to parse urlencoded
// and multipart form data
form({ keepExtensions: true })
);
app.get('/', function(req, res){
res.send('<form method="post" enctype="multipart/form-data">'
+ '<p>Image: <input type="file" name="image" /></p>'
+ '<p><input type="submit" value="Upload" /></p>'
+ '</form>');
});
app.post('/', function(req, res, next){
// connect-form adds the req.form object
// we can (optionally) define onComplete, passing
// the exception (if any) fields parsed, and files parsed
req.form.complete(function(err, fields, files){
if (err) {
next(err);
} else {
console.log('\nuploaded %s to %s'
, files.image.filename
, files.image.path);
res.redirect('back');
}
});
// We can add listeners for several form
// events such as "progress"
req.form.on('progress', function(bytesReceived, bytesExpected){
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
});
});
app.listen(3000);
console.log('Express app started on port 3000');
发布于 2012-03-21 05:42:29
由于您使用的是express,因此只需添加bodyParser:
app.use(express.bodyParser());
然后,您的路由将自动访问req.files中上载的文件:
app.post('/todo/create', function (req, res) {
// TODO: move and rename the file using req.files.path & .name)
res.send(console.dir(req.files)); // DEBUG: display available fields
});
如果您将输入控件命名为"todo“(在Jade中):
form(action="/todo/create", method="POST", enctype="multipart/form-data")
input(type='file', name='todo')
button(type='submit') New
那么当你在‘files.todo’中获得路径和原始文件名时,上传的文件就准备好了:
其他有用的req.files属性:
二进制大小(以字节为单位)
发布于 2012-05-15 20:46:20
您可以在主应用程序文件的配置块中配置connect body解析器中间件:
/** Form Handling */
app.use(express.bodyParser({
uploadDir: '/tmp/uploads',
keepExtensions: true
}))
app.use(express.limit('5mb'));
https://stackoverflow.com/questions/5149545
复制相似问题