NSURLSessionUploadTask - 指定内容范围

时间:2017-11-17 16:05:33

标签: ios nsurlsession nsurlsessionuploadtask

我正在使用NSURLSession的uploadTaskWithRequest:FromFile:在后台上传文件。这有效,但是我只想上传文件的某个部分。所以我试图让上传任务只上传一定范围的文件。

我已尝试设置Content-Range和Range标头,例如:

[request addValue:@"bytes 2367488-7056719/7056719" forHTTPHeaderField:@"Content-Range"];
[request addValue:@"4689232" forHTTPHeaderField:@"Content-Length"];

但是这不起作用 - 上传会话仍会发送整个文件。它保留Range标头并用整个文件的大小覆盖Content-Length标头。

有谁知道这是否可以做到?

我已经看到过使用后台上传任务无法上传简历的引用,这基本上是相同的(例如this问题)。但没有直接参考发送一定范围。

到目前为止,我唯一的解决方案是将文件的切碎版本写入磁盘..我想避免这种情况。

1 个答案:

答案 0 :(得分:0)

NSURLSession在决定发送内容时并不关心标题。它发送你给它的blob,如果是文件,还将Content-Length设置为文件大小(如果适用,则编码/压缩)。

如果您希望它从文件中间发送n个字节,您需要将这些字节写入自己的文件或使用流式传输请求来仅提供这些字节。

要执行后一种方法,请使用文件流创建上载请求,并使用强制转换为NSStream对象的绑定CFStream对象对。然后,打开流,当要求流委托提供更多字节时,提供它们,并检查写调用的返回值,以确定下次要求字节时要跳过的字节数。