我正在尝试使用multer将文件从客户端的html表单上传到服务器端,multer模块处理服务器端的文件。
这里的一切都是好的,因为我从服务器得到200 ok响应,但文件应该上传到我的文件系统,我无法看到它。
这是我的html表单
<template>
<div id="app">
<form action="http://localhost:3000/upload" method="post" enctype="multipart/form-data">
<h2>Select a file</h2>
<input name="curriculum" id="inputVal" type="file">
<button type="submit">Send</button>
</form>
</div>
</template>
我的服务器端代码
var express = require('express');
var router = express.Router();
var path = require('path');
var fs = require('fs');
var multer = require('multer')
var storage = multer.diskStorage({
destination: function(req,file,callback) {
callback(null, '../files');
},
filename: function(req,file,callback) {
callback(null,Date.now() + file,callback);
}
})
var upload = multer({ storage: storage }).single('curriculum');
router.post('/upload', function (req, res, next) {
upload(req,res, function(err){
if(err) {
return res.status(404).send("a error ocurred");
}
res.status(200).send("file uploaded");
});
});
module.exports = router;
更新
我改变了我的解决方案基础,而不是npm multer网站(服务器端)
var express = require('express');
var router = express.Router();
var path = require('path');
var fs = require('fs');
var multer = require('multer')
var upload = multer({ dest: 'uploads/' });
router.post('/upload',upload.single('curriculum') ,function (req, res, next) {
console.log(req.files);
});
module.exports = router;
Ty的帮助!
答案 0 :(得分:1)
您没有指定要上传的文件。输入input
的名称。
router.post('/upload', upload.single('curriculum'), function (req, res, next) {
if(err) {
console.log(err);
return res.status(404).send("a error ocurred");
}
console.log(req.file);
res.status(200).send("file uploaded");
});
同样在您的文件名中,请确保您的文件以.png
或.jpeg
等扩展名结尾,否则您会看到一堆没有任何意义的字节码。
您可以使用file.originalname
cb(null, file.originalname)
或者你可以明确地添加它。
callback(null, file.fieldname + '-' + Date.now() + '.png')
您可能希望删除callback(null,Date.now() + file,callback)
的第三个参数callback
,因为它可能会阻碍程序,并将+ file
更改为+ file.originalname
,因为{{ 1}}是一个对象,计算机可能在访问文件名对象时遇到问题。
<强>更新强>
主要NODEJS
file
HTML表格
var express = require('express')
var multer = require('multer')
var app = express()
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads') //you tell where to upload the files,
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + '.png')
}
})
var upload = multer({storage: storage,
onFileUploadStart: function (file) {
console.log(file.originalname + ' is starting ...')
},
});
app.set('view engine', 'ejs');
app.get('/', function(req, res, next){
res.render('mult'); //our html document
})
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file is the `avatar` file
console.log(req.file);
return false;
})
答案 1 :(得分:0)
对于那些对multer无法将文件上传到目标文件夹有疑问的人,我发现使用绝对路径而不是相对路径很有用。
类似这样的东西(节点js根目录的绝对路径)
公共/图片/图片
优于(相对路径)
../ public / images / pics
或(相对路径)
./ public / images / pics
对我有用