【问题标题】:upload files from different fields in a form using multer使用 multer 从表单中的不同字段上传文件
【发布时间】:2018-11-13 07:56:50
【问题描述】:

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

这个post方法给我internal server error 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']
})

你可以忽略这个MediaFiles 类,因为它提供了用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();

【问题讨论】:

    标签: node.js image multer


    【解决方案1】:

    我认为你不能有两个 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-26
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2023-02-21
      相关资源
      最近更新 更多