express multer 如何上传不同类型不同大小的文件
express multer how to upload different types of files with different sizes
const express = require("express");
const multer = require("multer");
const makeDir = require('make-dir');
const fs = require('fs');
const path = require('path');
const upload = multer({
storage: Storage,
fileFilter: (req, file, cb) => {
console.log("upload fileFilter req ::", req.file);
checkFileType(file, cb);
}
}).fields(
[
{
name:'comppic',
maxCount:1
},
{
name:'userpic',
maxCount:1
},
{
name:'usercv',
maxCount:1
}
]
);
function checkFileType(file, cb) {
console.log("file:::::::::::::::", file);
}
我正在使用上面的代码上传文件。在那里我如何检查正在上传的文件的大小,如果文件大小超过 returns 错误。
console.log("upload fileFilter req ::", req.file); // output undefined
console.log("file:::::::::::::::", file);
输出
file::::::::::::::: {
fieldname: 'userpic',
originalname: 'DSC01416.JPG',
encoding: '7bit',
mimetype: 'image/jpeg'
}
请帮我解决一下
基于文件类型的不同文件大小限制,req.rawHeaders
中有文件大小,所以我根据类型文件在fileFilter
中写了一个逻辑,这对我有用,multer set .any
为 multer。 req.rawHeaders
是数组,其中一项是文件大小,在我的请求中,文件大小在数组中的最后一项所以我使用 req.rawHeaders.slice(-1)[0]
在这个逻辑中,.pdf < 1 Mb
和 .png,.jpeg,.jpg < 4 Mb
的大小
const multer = require('multer');
const { v4: uuid } = require("uuid");
const TYPE_IMAGE = {
'image/png': 'png',
'image/jpeg': 'jpeg',
'image/jpg': 'jpg'
};
const TYPE_File = {
'application/pdf': 'pdf',
};
const fileUpload =
multer({
limits: 500000,
storage: multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/images');
},
filename: (req, file, cb) => {
const ext = (TYPE_IMAGE[file.mimetype]) ? TYPE_IMAGE[file.mimetype] : TYPE_File[file.mimetype];
cb(null, uuid() + '.' + ext);
}
}),
fileFilter: (req, file, cb) => {
let size = +req.rawHeaders.slice(-1)[0]
let isValid =false;
if(!!TYPE_IMAGE[file.mimetype] && size < 4 * 1024 * 1024 ){
isValid = true
}
if(!!TYPE_File[file.mimetype] && size < 1 * 1024 * 1024 ){
isValid = true
}
let error = isValid ? null : new Error('Invalid mime type!');
cb(error, isValid);
}
}).any();
module.exports = fileUpload;
const express = require("express");
const multer = require("multer");
const makeDir = require('make-dir');
const fs = require('fs');
const path = require('path');
const upload = multer({
storage: Storage,
fileFilter: (req, file, cb) => {
console.log("upload fileFilter req ::", req.file);
checkFileType(file, cb);
}
}).fields(
[
{
name:'comppic',
maxCount:1
},
{
name:'userpic',
maxCount:1
},
{
name:'usercv',
maxCount:1
}
]
);
function checkFileType(file, cb) {
console.log("file:::::::::::::::", file);
}
我正在使用上面的代码上传文件。在那里我如何检查正在上传的文件的大小,如果文件大小超过 returns 错误。
console.log("upload fileFilter req ::", req.file); // output undefined
console.log("file:::::::::::::::", file);
输出
file::::::::::::::: {
fieldname: 'userpic',
originalname: 'DSC01416.JPG',
encoding: '7bit',
mimetype: 'image/jpeg'
}
请帮我解决一下
基于文件类型的不同文件大小限制,req.rawHeaders
中有文件大小,所以我根据类型文件在fileFilter
中写了一个逻辑,这对我有用,multer set .any
为 multer。 req.rawHeaders
是数组,其中一项是文件大小,在我的请求中,文件大小在数组中的最后一项所以我使用 req.rawHeaders.slice(-1)[0]
在这个逻辑中,.pdf < 1 Mb
和 .png,.jpeg,.jpg < 4 Mb
const multer = require('multer');
const { v4: uuid } = require("uuid");
const TYPE_IMAGE = {
'image/png': 'png',
'image/jpeg': 'jpeg',
'image/jpg': 'jpg'
};
const TYPE_File = {
'application/pdf': 'pdf',
};
const fileUpload =
multer({
limits: 500000,
storage: multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/images');
},
filename: (req, file, cb) => {
const ext = (TYPE_IMAGE[file.mimetype]) ? TYPE_IMAGE[file.mimetype] : TYPE_File[file.mimetype];
cb(null, uuid() + '.' + ext);
}
}),
fileFilter: (req, file, cb) => {
let size = +req.rawHeaders.slice(-1)[0]
let isValid =false;
if(!!TYPE_IMAGE[file.mimetype] && size < 4 * 1024 * 1024 ){
isValid = true
}
if(!!TYPE_File[file.mimetype] && size < 1 * 1024 * 1024 ){
isValid = true
}
let error = isValid ? null : new Error('Invalid mime type!');
cb(error, isValid);
}
}).any();
module.exports = fileUpload;