我正在使用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问题)。但没有直接提到发送某个范围。
到目前为止,我唯一的解决方案是将该文件的一个截断版本写入磁盘。我想避免这种情况。
发布于 2017-11-18 23:54:49
在决定发送什么内容时,NSURLSession并不关心报头。它会发送您提供的blob,如果是文件,还会将Content-Length设置为文件的大小(如果适用,则为编码/压缩)。
如果您希望它在文件中间发送n个字节,则需要将这些字节写入到它们自己的文件中,或者使用流请求让您只提供这些字节。
要执行后一种方法,请创建一个包含文件流的上载请求,并使用一对绑定的CFStream对象强制转换为NSStream对象。然后,打开流,当要求流委托提供更多字节时,提供这些字节,并检查write调用的返回值,以确定下次请求字节时要跳过多少字节。
https://stackoverflow.com/questions/47354748
复制相似问题