4

我正在尝试使用 multer-s3 将图像上传到 AWS S3。一切正常(即上传视频、图像和文件),但不完整。我不知道如何跟踪上传的进度或百分比。

我的 multer 代码被视为这样的中间件

const multer    = require('multer');
const AWS       = require('aws-sdk');
const multerS3  = require('multer-s3');

var s3 = new AWS.S3();

const s3Storage = multerS3({
    s3     : s3,
    bucket : 'app-bucket',
    acl    : 'public-read',
    key    : function (req, file, callback) {
        callback(null, file.originalname);
    }
});

module.exports.s3Upload  = multer({ storage: s3Storage });

然后我将中间件附加到我的路由中,如下所示:

router.route('/image/upload').get(uploadController.getUploadImageController)
                    .post(middleware.s3Upload.single('myImage'),
                    uploadController.postUploadPhotoToAlbumController );

然后在我的控制器上,是一个简单的发布请求,它将保存数据库的路径:

module.exports.postUploadPhotoToAlbumController = (req, res) => {
    let query = Images.findById({ _id: req.params.id });

    query.exec((err, images) => {   
        if(err){
            return res.status(500).send({success: false, error: err, message: 'Something went wrong.'});
        } if(!images){
            return res.status(200).send({success: false, message: 'That image does not exist to your album.'});
        }

        images.image = !!req.file ? AwsS3PublicURL.setAwsPublicUrlSingle(req) : null; 

        images.save(err => {
            if(err){
                return res.status(500).send({success:false, error: err, message: 'Something went wrong.'});
            }
            req.flash('message', 'Your image was successfully uploaded.');
            res.redirect('/album/photos');
        }); 
    });
}

AwsS3PublicURL.setAwsPublicUrlSingle 是我的 AmazonS3Bucket 设置为公共的路径。

我的问题是我不知道如何正确跟踪我的上传进度或进度百分比,并在前端或控制台中显示。如果有人知道答案,请提前谢谢。

4

0 回答 0