【发布时间】:2016-09-17 17:24:02
【问题描述】:
我将 Multer 与我的 MEAN2 堆栈一起使用,并且通过 ng2-uploader 可以正常上传文件。
但我正在尝试将其上传到服务器,这样我就可以将 csv 文件解析为 json,但这不是问题。
文件上传正常...但它上传到AppData\Local\Temp,这是上传后的文件信息:
[ { fieldname: 'file',
originalname: 'sfgsgsfrfs.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'C:\\Users\\Jezyk\\AppData\\Local\\Temp',
filename: 'z83yrcprp4m8azfflxr.jpg',
path: 'C:\\Users\\Jezyk\\AppData\\Local\\Temp\\z83yrcprp4m8azfflxr.jpg',
size: 120850 } ]
这是我用来存储文件的代码:
const upload = multer({
dest: './server/uploads/',
storage: multer.diskStorage({
filename: (req, file, cb) => {
let ext = path.extname(file.originalname);
cb(null, `${Math.random().toString(36).substring(7)}${ext}`);
}
})
});
router.route('/upload').post(upload.any(), (req, res) => {
console.log(req.files);
res.json(req.files.map(file => {
let ext = path.extname(file.originalname);
return {
originalName: file.originalname,
filename: file.filename
}
}));
});
知道为什么会这样吗?
【问题讨论】:
-
你试过用绝对路径代替相对路径吗?
-
@mscdex 但是每次它在不同的地方供人们使用时都必须更改它,使用'./server/uploads'应该没问题???,但它只是忽略了'dest'值,是因为 fof multer.diskStorage 吗??
-
这是一个测试,看看它是否有帮助。如果由于某种原因无法正确解析路径,您可以使用
__dirname帮助生成绝对路径(相对于脚本文件目录)。 -
@mscdex 啊,好吧,我明白了,我将 dest 更改为:
dest: __dirname + '/server/uploads/',,然后我 console.logged __dirname 和 req.files 以确保其正常工作,结果如下:C:\Users\Jezyk\Desktop\Feedbacker [ { fieldname: 'file', originalname: 'freelance pay.txt', encoding: '7bit', mimetype: 'text/plain', destination: 'C:\\Users\\Jezyk\\AppData\\Local\\Temp', filename: '8cqvf7nn8v4e6401kyb9.txt', path: 'C:\\Users\\Jezyk\\AppData\\Local\\Temp\\8cqvf7nn8v4e6401kyb9.txt', size: 104 } ] -
你用的是什么版本的multer?