gpt4 book ai didi

ios - 通过 URLSession 上传大文件

转载 作者:行者123 更新时间:2023-11-30 12:53:01 25 4
gpt4 key购买 nike

所以我有一些代码一直用于在我的应用程序中上传文件,大致如下:

var mutableURLRequest = URLRequest(url: url)
var uploadData = try! Data(contentsOf: dataUrl)
session.uploadTask(with: mutableURLRequest, from: uploadData).resume()

还有更多内容,但这些是相关部分。但是我注意到一些大型视频文件 Data(contentsOf: dataUrl) 会失败,因为文件太大而无法加载到内存中。我想重构它,以便能够将整个文件逐段传输到服务器,而无需将整个文件加载到内存中。

我已经从我的服务器中弄清楚了这一点,我唯一没有弄清楚的是如何从 URL 中的数据中获取 chunkSize 片段,而不将其放入数据对象中。我本质上想要这个结构:

let chunkSize = 1024 * 1024
let offset = 0
let chunk = //get data from dataUrl of size chunkSize offset by offset

//Upload each chunk and increment offset

NSInputStream 似乎很有希望能够做到这一点,但我无法弄清楚以这种方式从磁盘上的文件中提取字节的最低设置。我可以使用上面的什么代码来填充 let chunk = 行来完成这样的任务?

最佳答案

我有一个可行的解决方案,可能需要一些调整,但似乎适用于我尝试过的大文件:

public func getNextChunk() -> Data?{
if _inputStream == nil {
_inputStream = InputStream(url: _url)
_inputStream?.open()
}
var buffer = [UInt8](repeating: 0, count: CHUNK_SIZE)
var len = _inputStream?.read(&buffer, maxLength: CHUNK_SIZE)
if len == 0 {
return nil
}
return Data(buffer)
}

我还在类的 deinit 上调用 _inputStream?.close() 来管理磁盘上文件的分块。

关于ios - 通过 URLSession 上传大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40731646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com