使用multer

时间:2018-06-04 02:42:25

标签: node.js image multer

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

这个帖子方法让我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();

1 个答案:

答案 0 :(得分:0)

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