You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:55:16