Multer 'storage' 选项不起作用,而 'dest' 选项起作用
Multer 'storage' option does not work while 'dest' one does
我正在使用 Multer 上传和存储文件。如果我使用 dest
选项文件上传到我的 /uploads
文件夹没有问题。虽然这有效,但它会像 2eb3f1a6def453f7a461c5de353b06f8
一样保存上传,所以我想使用 storage
选项,但由于某种原因这不起作用或者我和文件上传(登录控制台),但不会保存到文件夹。
我已经尝试了几种不同的方法来实现这一点并且 none 工作。任何人都可以指出可能有什么问题吗?
{
fieldname: 'attachments',
originalname: 'myFile.pdf',
encoding: '7bit',
mimetype: 'application/pdf',
destination: 'uploads/',
filename: '2eb3f1a6def453f7a461c5de353b06f8',
path: 'uploads/2eb3f1a6def453f7a461c5de353b06f8',
size: 57638
}
const express = require('express');
const app = express();
const multer = require("multer");
const path = require('path');
// const upload = multer({ dest: "uploads/" }); // this works, file saves to /uploads
var upload = multer({ storage: storage }); // this doesnt work/ files dont save to /uploads
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded());
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
var storage = multer.diskStorage({
destination: function(req, file, cb) {
// cb(null, 'uploads/');
// cb(null, __dirname + '/uploads');
cb(null, './uploads');
},
filename: function (req, file, cb) {
// cb(null , file.originalname);
// cb(null, file.fieldname + '-' + Date.now());
// By default, multer removes file extensions so let's add them back
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
// var upload = multer({ storage: storage });
app.post('/', upload.array('attachments') , (req, res) =>{
try {
res.send(req.files);
console.log('body', req.body);
console.log('files', req.files);
} catch(error) {
console.log(error);
res.send(400);
}
});
module.exports = {
path: '/api/upload',
handler: app
};
在用 multer.diskStorage
定义后声明 var upload = multer({ storage: storage })
足以解决 OP 的问题。
我正在使用 Multer 上传和存储文件。如果我使用 dest
选项文件上传到我的 /uploads
文件夹没有问题。虽然这有效,但它会像 2eb3f1a6def453f7a461c5de353b06f8
一样保存上传,所以我想使用 storage
选项,但由于某种原因这不起作用或者我和文件上传(登录控制台),但不会保存到文件夹。
我已经尝试了几种不同的方法来实现这一点并且 none 工作。任何人都可以指出可能有什么问题吗?
{
fieldname: 'attachments',
originalname: 'myFile.pdf',
encoding: '7bit',
mimetype: 'application/pdf',
destination: 'uploads/',
filename: '2eb3f1a6def453f7a461c5de353b06f8',
path: 'uploads/2eb3f1a6def453f7a461c5de353b06f8',
size: 57638
}
const express = require('express');
const app = express();
const multer = require("multer");
const path = require('path');
// const upload = multer({ dest: "uploads/" }); // this works, file saves to /uploads
var upload = multer({ storage: storage }); // this doesnt work/ files dont save to /uploads
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded());
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
var storage = multer.diskStorage({
destination: function(req, file, cb) {
// cb(null, 'uploads/');
// cb(null, __dirname + '/uploads');
cb(null, './uploads');
},
filename: function (req, file, cb) {
// cb(null , file.originalname);
// cb(null, file.fieldname + '-' + Date.now());
// By default, multer removes file extensions so let's add them back
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
// var upload = multer({ storage: storage });
app.post('/', upload.array('attachments') , (req, res) =>{
try {
res.send(req.files);
console.log('body', req.body);
console.log('files', req.files);
} catch(error) {
console.log(error);
res.send(400);
}
});
module.exports = {
path: '/api/upload',
handler: app
};
在用 multer.diskStorage
定义后声明 var upload = multer({ storage: storage })
足以解决 OP 的问题。