首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用multer-s3处理错误

如何使用multer-s3处理错误
EN

Stack Overflow用户
提问于 2018-11-19 20:30:31
回答 2查看 1.9K关注 0票数 0

我使用multer-s3将文件上传到was S3。当我上传一个文件时,一切正常,我从来没有出现过错误,但是大多数教程都没有提到如何处理上传文件可能会出现问题的情况。

我上传的内容如下

代码语言:javascript
复制
var upload = multer({
    storage: multerS3({
       s3: s3,
       bucket: 'my bucket',
       key: function (req, file, cb) {
          console.log(file);
          cb(null, file.originalname);
       }
    })
});

我从

代码语言:javascript
复制
app.post('/File/Add' , storage_functions.upload.single('file'), function (req, res) {
    console.log('file uploaded')

});

multers3是否在上传时提供某种类型的响应。这对于访问错误很有用,但如果响应包含s3中的文件路径,也会很有用。

EN

回答 2

Stack Overflow用户

发布于 2018-11-20 06:23:59

您可以添加回调函数来处理错误。

代码语言:javascript
复制
const upload = storage_functions.upload.single('file');
app.post('/File/Add', function (req, res) {
    upload(req, res, function (err) {
        if (err) {
            // your error handling goes here
        }
    });
});

要查找更多详细信息,请访问multer documentation

票数 2
EN

Stack Overflow用户

发布于 2021-11-02 14:22:32

下面是我处理错误的方法:我创建了一个s3.js文件,其中包含multer-s3配置和错误处理程序

代码语言:javascript
复制
import S3 from 'aws-sdk/clients/s3.js'
import multer from 'multer'
import multerS3 from 'multer-s3'
import dotenv from 'dotenv'

dotenv.config()

const region = process.env.S3_REGION

const s3 = new S3({
    region
})

// upload to S3 storage
export const uploadFiles = (req, res, next) => {

    const upload = multer({
        limits: { files: 6 }, 
        storage: multerS3({
            s3: s3,
            bucket: process.env.S3_BUCKET_NAME,
            metadata: function(req, file, cb) {
                cb(null, { fieldName: file.fieldname })
            },
            key: function(req, file, cb) {
                cb(null, `images/users/${ req.userId }/products/${ req.body.name }/${ new Date().toISOString() }-${ file.originalname }`)
            },
        })
    }).array('photos', 6)

    // Custom error handling for multer
    upload(req, res, (error) => {
        if (error instanceof multer.MulterError) 
            return res.status(400).json({ 
                message: 'Upload unsuccessful', 
                errorMessage: error.message,
                errorCode: error.code
            })
        
        if (error) 
            return res.status(500).json({
                message: 'Error occured',
                errorMessage: error.message
            })
        console.log('Upload successful.')
        next()
    })
}

现在,您可以在要将文件上传到的路由上使用此选项。

代码语言:javascript
复制
import express from 'express'
import { uploadFiles } from '../config/s3.js'

const router = express.Router()

router.post('/upload', uploadFiles, async(req, res) => {
  console.log(req.files)
})

export default router

因为我将文件限制设置为6,所以当我尝试发送超过6个文件时,我将得到以下响应。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53374707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档