使用express.js将大型视频文件上传到s3

时间:2019-10-25 10:54:59

标签: amazon-s3 multer multer-s3

我正在使用express和multer-s3将媒体文件上传到s3。如果我上传的文件小于10 mb,就可以正常工作。 如果我上传的文件大于7mb(我测试过。如果我上传的文件大于30mb,它会失败),则报错。cannot determine length of string

我正在上传.mp4文件

错误消息

Exception has occurred: Error
Error: Cannot determine length of [object Object]
    at byteLength (projectpath/node_modules/aws-sdk/lib/util.js:200:26)
    at ManagedUpload.adjustTotalBytes (projectpath/node_modules/aws-sdk/lib/s3/managed_upload.js:299:25)
    at ManagedUpload.configure (projectpath/node_modules/aws-sdk/lib/s3/managed_upload.js:122:10)
    at new ManagedUpload (projectpath/node_modules/aws-sdk/lib/s3/managed_upload.js:93:10)
    at features.constructor.upload (projectpath/node_modules/aws-sdk/lib/services/s3.js:1087:20)
    at S3Storage.<anonymous> (projectpath/node_modules/multer-s3/index.js:182:26)
    at projectpath/node_modules/multer-s3/index.js:68:10
    at FileStream.<anonymous> (projectpath/node_modules/multer-s3/index.js:47:5)
    at Object.onceWrapper (events.js:286:20)
    at FileStream.emit (events.js:198:13)
    at FileStream.EventEmitter.emit (domain.js:448:20)
    at FileStream.Readable.read (_stream_readable.js:491:10)
    at flow (_stream_readable.js:957:34)
    at resume_ (_stream_readable.js:938:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

我的代码

正文解析器配置

app.use(bodyparser.urlencoded({ extended: true, limit: '1024mb' }));
app.use(bodyparser.json({}));

文件路由

router.route('/faqvideoupload')
    .post(faqFileUpload.array('files', 1), uploadFileHandler)

faqFileUpload

module.exports.faqFileUpload = multer({
    storage: multerS3({
        s3: s3,
        acl:  'public-read',
        bucket: process.env.BUCKET_NAME,
        contentDisposition: 'inline',
        // contentLength: 1 * 1024 * 1024 * 1024,
        contentType: multerS3.AUTO_CONTENT_TYPE,
        metadata: function (req, file, cb) {
            cb(null, { fieldName: file.fieldname, });
        },
        key: function (req, file, cb) {
            // console.log(file, 23244324)
            cb(null, `faqs/videos/filename}`)
        }
    })
 })

uploadFileHandler

async function uploadFileHandler(req, res){
    try {
        let files = req.files.map((img)=> {
            return {
                key : img.key, location : img.location, type: img.mimetype
            }
        })
        return res.json({
            success : true,
            files
        })
    } catch (error) {
        return res.json({
            success: false,
            message: error.message
        })
    }
} 

我需要更改s3存储桶本身中的任何设置吗?

我还读到我必须要满足contentLength的要求,但这也不起作用。

我正在使用带有eb的t2.micro ec2

0 个答案:

没有答案