私はnode.jsを学んでいるだけで、expressとmulterを使用して簡単なファイルアップロードを行うことができません。ここでNode.js TypeError:未定義のプロパティ 'file'を読み取ることができません
は形式です:
私は私のconfigure.js
で 画像をアップロード
:
app.use(express.static(path.join(__dirname, 'public')));
app.use(multer({dest:'../public/upload/temp'}).single('file'));
image.js
コントローラ:
TypeError: Cannot read property 'file' of undefined
at saveImage (/home/pc/node-dev/test-proj/controllers/image.js:55:37)
at module.exports.create (/home/pc/node-dev/test-proj/controllers/image.js:76:9)
at Layer.handle [as handle_request] (/home/pc/node-dev/test-proj/node_modules/express/lib/router/layer.js:95:5)
at next (/home/pc/node-dev/test-proj/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/home/pc/node-dev/test-proj/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/pc/node-dev/test-proj/node_modules/express/lib/router/layer.js:95:5)
at /home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:277:22
at Function.process_params (/home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:330:12)
at next (/home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:271:10)
at urlencodedParser (/home/pc/node-dev/test-proj/node_modules/body-parser/lib/types/urlencoded.js:95:37)
そして、私は
req
オブジェクトをログインしたときに、
file
がない:
create: function(req, res) {
var saveImage = function() {
console.log(req.body);
var possible = 'abcdefghijklmnopqrstuvwxyz',
imgUrl = '';
for(var i=0; i < 6; i+=1) {
imgUrl += possible.charAt(Math.floor(Math.random() * possible.length));
}
var tempPath = req.files.file.path, //<line 55 error
ext = path.extname(req.files.file.name).toLowerCase(),
targetPath = path.resolve('./public/upload/' + imgUrl + ext);
if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {
fs.rename(tempPath, targetPath, function(err) {
if (err) throw err;
res.redirect('/images/' + imgUrl);
});
} else {
fs.unlink(tempPath, function() {
if (err) throw err;
res.json(500, {error: 'Only image files are allowed.'});
});
}
};
saveImage();
},
私は画像をアップロードしようとすると、私はこのエラーを取得するしかし
{ title: 'myimage', description: 'something' }
実際にはスニペットはちょっと修正されたバージョンで、私はthis bookで読んでいますが、これは古くなったexpress-3を使用しています。だから基本的に私はちょうどmulter
の部分でそれを更新しました。
ここで何が間違っていて、どのように修正するのか不思議です。
これはmulterで実行可能な解決策を見つけたことがありますか?私は以下の修正を試して、req.fileとreq.pathに変更しているようですが、本の例は/ image/routeにリダイレクトされます。 – Dave
あなたはvar tempPath = req.file.path; var ext = path.extname(req.file.originalname).toLowerCase(); var targetPath = path.resolve( './ public/upload /' + imgUrl + ext); – iansari