node.js - 使用 multer 以表单形式上传不同字段的文件

标签 node.js image multer

我有一个文档,其中包含两个输入字段type="file",我想在提交时上传这两个字段。

此帖子方法在上传两个文件时给我内部服务器错误 500,但当我上传一个文件时,一切正常。

router.post('/', mediaFiles.uploadSingle('icon_url'), mediaFiles.uploadSingle('background_url'),
    async (req, res) => {
       name: req.body.name,
       icon_url: req.file.path.replace(/\\/g, "/"), // req.file['icon_url']
       background_url: req.file.path.replace(/\\/g, "/") // req.file['background_url']
})

you can ignore this MediaFiles class because it provides traditional code to upload images with multer

import multer from "multer";
import path from "path";

class MediaFiles {
    private storage = multer.diskStorage({
        destination: 'uploads/',
        filename: function (req, file, callback) {
            callback(
                null,
                file.originalname.replace(/\.[^/.]+$/, "") + '-' + Date.now() + path.extname(file.originalname))
        }
    })

    uploadSingle(fieldName?: string) {
        try {
            return multer({
                storage: this.storage,
                limits: { fileSize: 1024 * 1024 * 1 }, // 1MB = 1024 * 1024 * 1
                fileFilter: function (req, file, callback) {
                    const fileTypes = /jpeg|jpg|png/;

                    const extName = fileTypes.test(path.extname(file.originalname).toLowerCase());
                    const mimeType = fileTypes.test(file.mimetype);

                    if (extName && mimeType) {
                        callback(null, true)
                    } else {
                        callback(new Error('Error: Images Only!'), null)
                    }
                }
            }).single(fieldName);
        } catch (err) {
            console.log(err.message)
        }
    }
}

export default new MediaFiles();

最佳答案

我认为你不能有两个 multer 对象,我遇到了同样的问题,这对我有用。

const storage = multer.diskStorage()
const mediaFiles = multer({ 
storage:storage })
.fields([{ name: 'icon_url', maxCount: 1 }, { name: 'background_url', maxCount: 1 } ]

router.post('/', mediaFiles, async (req, res) => {
    console.log(req.files) // req.files is an array of files
}

关于node.js - 使用 multer 以表单形式上传不同字段的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50672824/

相关文章:

node.js - 使用 res.render 时设置自定义 header

javascript - Socket.io 不断尝试建立连接

css - 使用 flexbox 将相邻图像居中

html - 背景图像不适合全屏。高度在下降

javascript - 使用 Multer 时出现意外的表单错误结束

javascript - 如何传递参数信息异步队列饱和或不饱和?

node.js - 使用 formData 进行 Express Node-fetch 时出现无效的 json 响应正文错误

html - 如何让背景显示完整图像

Node.js:通过 REST API 上传多部分文件

javascript - 类型错误 : app. use() 需要中间件