AWS 放大存储 |上传大文件

Posted

技术标签:

【中文标题】AWS 放大存储 |上传大文件【英文标题】:AWS Amplify Storage | Upload large file 【发布时间】:2021-08-26 10:34:49 【问题描述】:

使用 AWS Amplify Storage,将文件上传到 AWS S3 应该很简单:

Storage.put(key, blob, options)

上述方法适用于较小的文件,(不超过 4MB 左右)。

上传任何更大的东西,例如。一个 25MB 的视频,不起作用:Storage 只是冻结(应用程序不会冻结,只有 Storage)。不返回错误。

问题:如何使用 AWS Amplify Storage 上传较大的文件?

旁注:所描述的行为同时出现在 androidios 上。

【问题讨论】:

【参考方案1】:

Amplify 现在会自动将大文件分割成 5Mb 的块并使用 Amazon S3 分段上传流程上传它们

https://aws.amazon.com/about-aws/whats-new/2021/10/aws-amplify-javascript-file-uploads-storage/

https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-process

【讨论】:

看起来像另一个“隐藏”的 AWS Amplify 错误。那么,正确的答案是什么?迁移到更新的 Amplify 版本? 我已经使用最新版本的 Amplify(在撰写本文时为 7.6.5)测试了超过 100mb 的文件,它可以正常工作 “当我们使用旧版本的 aws-amplify”:“^3.1.1”时,出现了像您提到的问题(问题的作者)。”【参考方案2】:

更新后

"aws-amplify": "ˆ4.3.11",
"aws-amplify-react-native": "^6.0.2"

超过 100MB 的上传不再冻结 UI + 我们还迁移到 resumable uploads。当我们使用旧版本的 aws-amplify": "^3.1.1" 时,出现了您提到的问题。

以下是 2021 年 12 月针对上述修复的拉取请求: https://github.com/aws-amplify/amplify-js/pull/8336

所以解决方案真的是升级 AWS Amplify 库。

不过,这种方法也适用于 iOS在 Android 上上传大型媒体文件会导致调用 fetch 时出现网络错误(作为调用 Storage.put 方法之前的必需步骤)。

【讨论】:

以上是关于AWS 放大存储 |上传大文件的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 大文件分片上传

如何在 AWS Elastic Beanstalk 上的 Nodejs 应用程序上启用大文件的上传?

使用 go 将流文件上传到 AWS S3

aws lambda函数为单个事件多次触发

允许第三方用户将文件上传到您的 AWS S3 fs [关闭]

如何使用 Rails 和 Active Storage 实现 AWS S3 分段上传?