gpt4 book ai didi

node.js - Express 3.4.8 图片上传问题 - 不使用bodyParser()如何解决?

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:44 26 4
gpt4 key购买 nike

我在 Gist 的代码: https://gist.github.com/yhagio/10654836

我是 Express 的新手,从“Node.js in Action - Chapter.9”(上传照片)一书的例子中尝试过。作者使用 Express 版本“3.4.0”,但我使用“3.4.8”,我遇到了这个问题,

上传图片时的错误信息:

500 类型错误:无法读取未定义的属性“照片”

routes/photos.js

...
exports.submit = function (dir) {
return function (req, res, next) {
var img = req.files.photo.image; // ---- This 'photo' part is undefined
var name = req.body.photo.name || img.name;
var path = join(dir, img.name);

fs.rename(img.path, path, function (err) {
if (err) { return next(err); };

Photo.create({
name:name,
path:req.name
}, function (err) {
if (err) { return next(err); };
res.redirect('/');
});
});
};
};

但我发现在我的 app.js 中(bodyParser() 从 3.4.8 开始不再使用)

app.js(在我的代码 Express 3.4.8 中)

...
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json()); // Instead of bodyParser()
app.use(express.urlencoded()); // Instead of bodyParser()
...

但是在作者的代码中有 bodyParser()。

app.js(作者使用Express 3.4.0

...
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser()); // This is no longer used in latest version

所以,我想知道我是否可以通过使用 multer ( http://expressjs-book.com/forums/topic/replacement-for-bodyparser-connect-multipart/ ) 来解决这个问题:

app.use(express.json());       
app.use(express.urlencoded());
app.use(multer({ dest: './public/photos' })); // I tried this

这没有解决。请帮我。谢谢。

更新:我想出的解决方案

此代码有效(routes/photos.js)

exports.submit = function (dir) {
return function(req, res, next){
var form = new multiparty.Form();
form.parse(req, function(err, fields, files){
var img = files.image[0];
var name = fields.name || img.originalFilename;
var path = join(dir, img.originalFilename);
fs.rename(img.path, path, function(err){
if(err){return next(err); };
Photo.create({
name: name,
path: img.originalFilename
}, function(err){
if(err){return next(err); };
res.redirect('/');
});
});
});
};
};

最佳答案

你有没有给node-multiparty试试?以下是 README 中的示例用法:

var multiparty = require('multiparty')
, http = require('http')
, util = require('util')

http.createServer(function(req, res) {
if (req.url === '/upload' && req.method === 'POST') {
// parse a file upload
var form = new multiparty.Form();

form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:\n\n');
res.end(util.inspect({fields: fields, files: files}));
});

return;
}

// show a file upload form
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
}).listen(8080);

作者 (Andrew Kelley) recommends避免 bodyParser,所以你避免它是对的,但 multiparty 似乎为我解决了类似的问题。

关于node.js - Express 3.4.8 图片上传问题 - 不使用bodyParser()如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23063317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com