使用多部分形式的 Swift IOS 进行流式上传

Posted

技术标签:

【中文标题】使用多部分形式的 Swift IOS 进行流式上传【英文标题】:Streaming upload with multipart-form Swift IOS 【发布时间】:2021-04-02 15:49:56 【问题描述】:

我需要将数据文件从 ios/Swift 应用程序流式传输到我的节点 API 服务器后端。在后端,我收到 POST 数据并将其上传到 S3 存储桶。我已经使用 Alamofire 实现了从 IOS 的上传,它工作正常,但这目前不是流媒体解决方案。我的理解是 Alamofire 不支持多部分表单数据流。鉴于我需要处理的文件大小(100-500GB),我需要流式传输。

流:IOS -> 节点 API -> S3

我找不到从 IOS 流式传输到服务器 Api 的任何解决方案。我知道如何接收到服务器的 POST 流转发到 S3 服务器。我只需要从 IOS App 发送流。

如果提供代码示例,我们将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

我不确定我是否完全理解这里的流是什么意思,因为 http 多部分表单数据并不是真正的流。你的意思是你想上传一个文件到节点服务器,然后通过管道直接上传到 S3?在这个过程中是否绝对需要节点服务器?有没有想过使用 Amplify SDK 直接上传? https://docs.amplify.aws/lib/storage/getting-started/q/platform/ios#uploading-data-to-your-bucket? Alamofire 确实支持多部分表单数据 - Upload files with parameters from multipartformdata using alamofire 5 in ios swift

【讨论】:

是的,我需要将一个大数据文件从设备流式传输到节点服务器。我需要节点服务器接口来管理具有多个用户的移动应用程序的 S3 存储桶访问。 Amplify SDK 看起来是个不错的选择,但我使用的是 Wasabi S3,而且我认为他们不支持。我可以使用 Alamofire 上传分段,但正如您所说,它不是流...谢谢。 上传这么大的文件可能需要后台工作。我建议为它探索 BackgroundTasks - developer.apple.com/forums/thread/129040

以上是关于使用多部分形式的 Swift IOS 进行流式上传的主要内容,如果未能解决你的问题,请参考以下文章

OpenStack Swift 多部分上传 jclouds

如何在 Alamofire 4 中进行多部分表单数据上传?

将图像大小压缩到 1.5 MB,同时发送到多部分 ios swift

通过压缩将HTTP发布多部分/表单数据流式传输并上传到存储中?

如何使用 Alamofire 5.0.0-beta.3 (Swift 5) 上传图片(多部分)

使用 PHP 在 Swift 5 中使用 Alamofire 接收图像上传