我正在使用NSURLSession的uploadTaskWithRequest:FromFile:在后台上传文件。这有效,但是我只想上传文件的某些部分。所以我试图让上传任务只上传一定范围的文件。
我尝试设置内容范围和范围标题,例如:
[request addValue:@"bytes 2367488-7056719/7056719" forHTTPHeaderField:@"Content-Range"];
[request addValue:@"4689232" forHTTPHeaderField:@"Content-Length"];
但是这不起作用 - 上传会话无论如何都会发送整个文件。它保留 Range 标头,并用整个文件大小覆盖 Content-Length 标头。
有谁知道这是否可以做到?
我已经看到后台上传任务无法上传简历的参考资料,这本质上是一回事(例如这个问题(。但没有直接提及发送某个范围。
到目前为止,我唯一的解决方案是将文件的切碎版本写入磁盘。我想避免这种情况。
NSURLSession 在决定发送什么时不关心标头。 它会发送你提供给它的 blob,如果是文件,还会将"内容长度"设置为文件的大小(如编码/压缩,如果适用(。
如果您希望它从文件中间发送 n 个字节,则需要将这些字节写入它们自己的文件,或者使用流式处理请求让您仅提供这些字节。
要执行后一种方法,请创建带有文件流的上载请求,并使用强制转换为 NSStream 对象的绑定对 CFStream 对象。 然后,打开流,当要求流委托提供更多字节时,请提供这些字节,并检查写入调用的返回值,以确定下次请求字节时要跳过多少字节。