关于TCBlobDownload中续传的问题

卓星波
2023-12-01

关于TCBlobDownload中使用续传,发现取消之后所有的进度又重新开始计算,不知道你是否有和我遇到相同的问题,其实这是有续传的,只是我想原作者没有考虑到得一个小bug而已,导致所有的进度被重置了,好了,接下来说下怎么修改这个bug吧

1.下载地址:https://github.com/thibaultCha/TCBlobDownload点击打开链接

2.源码的例子中有这个方法的调用

[self.sharedDownloadManager cancelAllDownloadsAndRemoveFiles:YES];

请将YES换为NO,YES是在取消的同时删除未下载完的文件,如果你想测试续传功能,未下载完的文件肯定不能删除

3.请保证文件大于1M,因为这个考虑到对本地磁盘的连续存取会影响硬件的质量,所以作者设置

const double kBufferSize = 1024*1024; // 1 MB 当接收的数据大于1M的时候才进行写文件操作,所以建议还是找个大于4M的文件进行测试吧

4.接下来是修改第三方代码了,

找到TCBlobDownload.m这个文件,找到

- (void)start 这个方法,接着找到

uint64_t fileSize = [[fm attributesOfItemAtPath:self.pathToFile error:nil] fileSize];
NSString *range = [NSString stringWithFormat:@"bytes=%lld-", fileSize];
 [fileRequest setValue:range forHTTPHeaderField:@"Range"];

这几行代码,

请加上_receivedDataLength += fileSize;

加上之后大概是这样的

    else {
        uint64_t fileSize = [[fm attributesOfItemAtPath:self.pathToFile error:nil] fileSize];
        _receivedDataLength += fileSize;
        NSString *range = [NSString stringWithFormat:@"bytes=%lld-", fileSize];
        [fileRequest setValue:range forHTTPHeaderField:@"Range"];
    }

5.接着找到这个方法

- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response

同理

    _expectedDataLength = [response expectedContentLength];
    _expectedDataLength += _receivedDataLength;


好了,修改完毕,试试吧,看看bug是否解决


关于TCBlobDownload

 类似资料: