Multer多文件上传本地正常,服务器端执行后挂起/Pending
Multer多文件上传问题调试求助
单文件上传功能正常,但多文件上传时出现异常,已配置Express静态文件指向uploads文件夹,相关代码如下:
Index.js 文件
import emailroutes from './routes/emailroutes.js' app.use(express.json({ limit: '25mb' })); app.use(express.urlencoded({ extended: false, limit: '25mb' })); app.use('/uploads', express.static(path.join('uploads'))); app.use('/email', emailroutes);
路由文件
import EmailController from '../controller/EmailController.js' import { storageMultiple } from '../helpers/storage.js' router.post('/', protect, storageMultiple, EmailController.postEmail)
多文件上传Multer中间件代码
import multer from 'multer'; import md5 from 'md5'; var filepatharray = []; const diskStorageMultiple = multer.diskStorage({ destination: (req, file, cb) => { cb(null, 'uploads'); }, filename: (req, file, cb) => { while (i < req.files.length) { filepath = md5(Date.now() + i) const mimeType = file.mimetype.split('/'); var fileType = mimeType[1]; if (fileType == 'vnd.openxmlformats-officedocument.spreadsheetml.sheet') { fileType = 'xlsx' } else if (fileType == 'text/plain') { fileType = 'txt' } else if (fileType == 'text/csv') { fileType = 'csv' } else if (fileType == 'vnd.ms-excel') { fileType = 'xls' } else if (fileType == 'vnd.openxmlformats-officedocument.wordprocessingml.document') { fileType = 'docx' } else if (fileType == 'msword') { fileType = 'doc' } else if (fileType == 'vnd.openxmlformats-officedocument.presentationml.presentation') { fileType = 'pptx' } else if (fileType == 'vnd.ms-powerpoint') { fileType = 'ppt' } const fileName = filepath + '.' + fileType; filepatharray.push({ path: filepath + '.' + fileType, name: file.originalname }) cb(null, fileName); i++; } }, }); const fileFilter = (req, file, cb) => { cb(null, true) }; const storageMultiple = multer({ storage: diskStorageMultiple, fileFilter: fileFilter).array( 'files' ); export { storageMultiple , filepatharray}
正常工作的单文件上传Multer代码
const diskStorage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, './uploads'); }, filename: (req, file, cb) => { filepath = md5(Date.now() + req.user.id) const mimeType = file.mimetype.split('/'); var fileType = mimeType[1]; if (fileType == 'vnd.openxmlformats-officedocument.spreadsheetml.sheet') { fileType = 'xlsx' } else if (fileType == 'text/plain') { fileType = 'txt' } else if (fileType == 'text/csv') { fileType = 'csv' } else if (fileType == 'vnd.ms-excel') { fileType = 'xls' } else if (fileType == 'vnd.openxmlformats-officedocument.wordprocessingml.document') { fileType = 'docx' } else if (fileType == 'msword') { fileType = 'doc' } else if (fileType == 'vnd.openxmlformats-officedocument.presentationml.presentation') { fileType = 'pptx' } else if (fileType == 'vnd.ms-powerpoint') { fileType = 'ppt' } const fileName = filepath + '.' + fileType; filepath = filepath + '.' + fileType cb(null, fileName); }, }); const storage = multer({ storage: diskStorage, fileFilter: fileFilter }).single( 'file' );
补充说明
多文件上传指定字段为files,单文件上传字段为file,请求通过/email接口提交,已配置protect用户认证中间件。
内容的提问来源于stack exchange,提问作者Malik Nabeel
相关产品推荐
相关产品推荐

