如何在单个上载操作中将大小超过5mb的文件上载到AWS

时间:2017-12-04 09:16:25

标签: node.js amazon-web-services file-upload postman



function uploadGuideMedia(req, res, next) {
    if (!req.file && !req.body.id) {
        return res.status(401).send({
            status: 401,
            data: "Upload a file with 'file' key"
        });
    }
    db.query('SELECT * from guide_media where _id = $1', [req.body.id], function(err, guide) {
        if (err) return next(err);
        if (guide.rows.length == 0) {
            return res.status(404).send({
                status: 404,
                data: "Guide_media not found"
            })
        } else {
            let name = req.file.path + path.extname(req.file.originalname);
            fs.renameSync(req.file.path, name);
            req.file.path = name;
            var s3bucket = new AWS.S3({
                params: {
                    Bucket: 'mapery-v2'
                }
            });
            fs.readFile(req.file.path, function(err, lq_file) {
                s3bucket.createBucket(function() {
                    var params = {
                        Key: 'upload-v2/' + req.file.originalname,
                        Body: lq_file,
                        ContentType: req.file.mimetype,
                        ACL: 'public-read'
                    };
                    s3bucket.upload(params, function(err, aws_images) {
                        fs.unlink(req.file.path, function(err) {
                            db.query('UPDATE guide_media SET image_path = $1 WHERE _id = $2  RETURNING *', [aws_images.Location, req.body.id], function(err, guide_res) {
                                if (err) return next(err);
                                return res.status(200).send({
                                    status: 'success',
                                    data: guide_res.rows
                                });
                            });
                        });
                    })
                })
            })
        }
    });
}



 我正在尝试将视频文件上传到AWS,但是当文件大小超过5mb时,它会作为一个部分上传(2个部分用于5mb,3个部分用于10mb)。但是在这个https://aws.amazon.com/s3/faqs/#How_much_data_can_I_store中他们说我们可以在单个上传操作中上传高达5GB的内容。我在哪里错了吗?

1 个答案:

答案 0 :(得分:1)

部分上传并不意味着您的文件将以多个部分存储在S3上。如果有效负载足够大,则SDK会同时上载多个部分的文件,以便在其中一个部分失败时可以部分重试上载。默认情况下,SDK使用5MB的partSize。您可以使用以下代码将partSize设置为10 MB。

var params = {Bucket: 'bucket', Key: 'key', Body: stream};
var options = {partSize: 10 * 1024 * 1024, queueSize: 1};
s3.upload(params, options, function(err, data) {
  console.log(err, data);
});

编辑:链接到上传方法的文档。 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property