URLSession已下载字节后如何恢复下载

时间:2019-08-14 06:51:32

标签: ios objective-c urlsession

我正在制作文件下载程序。它需要暂停并恢复功能。 我想存储下载的数据或字节,并在已下载的字节之后恢复下载。

这是iOS 9或更高版本。我的Xcode版本是10.3。我正在使用Objective-C,NSURLSessionDataTask。

  1. 我已经尝试过cancel(byProducingResumeData:)。但是我发现它不存储任何数据以恢复下载。

  2. 我尝试将范围放入我的HTTP标头请求中。喜欢

NSString *myRange = [NSString[NSString stringWithFormat:@"bytes %i-%f",myStartByte,myEndByte];
[myRequest addValue:range forHTTPHeaderField:@"Content-Range"];
[myRequest setHTTPMethod:@"GET"];

我尝试的两种方法均无效。有语法错误吗?我很麻烦。


@property (nonatomic) NSURLSession *DownloadSession;
@property (nonatomic) NSURLSession *DataSession;
@property (nonatomic) NSURLSessionDownloadTask* DownloadTask;
@property (nonatomic) *Data currentData;

....
-(void) download {
    if (AlreadyDownloadByte < TotalDownloadByte)
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        DownloadSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

        NSString *Range = [NSString[NSString stringWithFormat:@"bytes %i-%f",myStartByte,myEndByte];
        [request addValue:range forHTTPHeaderField:@"Content-Range"];
        [request setHTTPMethod:@"GET"];

        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:myURL];
        self->DownloadTask = [self->mDownloadSession downloadTaskWithRequest:request];
        [self->DownloadTask resume];
    }
}

-(void) pause {
           [self->mDownloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
            self.currentData = resumeData;
        }];
        self->mDownloadSession = nil;
        self->mDownloadTask = nil;
}

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

    double alreadyDownloadSize = (double)totalBytesWritten;
}

我无法存储下载的数据。 我使用“ didwritebyte ...”存储了Downloaded Byte,但无论下载字节如何,我都从头开始重新开始下载。

加。 我不想使用NSURLSessionDataTask。只想使用NSURLSessionDownloadTask。 这是因为我已经不得不恢复NSURLDataTask的问题。 我可以使用NSURLSessiondataTask存储下载的数据,但是即使我取消了任务,它也不会停止接收和响应数据。

谢谢

0 个答案:

没有答案