【问题标题】:how to upload a file with size greater than 5mb to AWS in single upload operation如何在单次上传操作中将大小大于 5mb 的文件上传到 AWS
【发布时间】:2017-12-04 18:08:25
【问题描述】:

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 时,它会作为一部分上传(5mb 为 2 部分,10mb 为 3 部分)。但是在这个https://aws.amazon.com/s3/faqs/#How_much_data_can_I_store 中,他们说我们一次上传操作最多可以上传5GB。我哪里错了??

【问题讨论】:

  • 为了稳定性和速度,AWS 默认使用分段上传,如果您不指定默认最大上传数,则它需要 5mb 块。如果你想在 1go 中上传,我相信你需要将 max-uploads 设置为 1。
  • 感谢您的回复。我需要在params 变量中指定??

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


【解决方案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

【讨论】:

  • 我已将 partSize 更改为 1gb 并尝试上传 30mb 文件,但它不起作用
  • 我确定 partSize 也有上限。
  • @SiddharthNayar 每个单独部分的大小上限为 5GB。
  • @Mgowda 你需要更具体,而不是说“它不起作用”。
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2014-10-06
相关资源
最近更新 更多