我们正在使用 AFNetworking 进行上传请求,但问题是上传请求所需的生命周期较短(2 小时)。当一个大文件上传 1GB 或更多时,当请求到达服务器时,令牌已经过期并且请求失败。AFNetworking 中是否存在我们可以打开与服务器的连接(身份验证)然后开始流式传输文件的方法,就像我们接收文件时下载任务发生的情况一样?
我尝试使用所有不同类型的 appendPartWith appendPartWithFileURL appendPartWithInputStream appendPartWithFileData
从网络的角度来看,它们都有相同的行为
{
....
NSString *sessionKey = token;
NSString *sha256 = [NSInputStream inputStreamWithURL:fileURL].sha256;
NSString *mimeType = @"application/octet-stream"
unsigned long long filesize = fileSize;
NSTimeInterval timeout = MAX(filesize * 1. / 500000., 30.);
....
request = [self.manager.requestSerializer
multipartFormRequestWithMethod:@"POST"
URLString:URLString
parameters:parameters
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileURL:fileURL
name:@"fileData"
fileName:[fileName urlEncode]
mimeType:mimeType
error:nil];
[formData appendPartWithFormData:[sessionKey dataUsingEncoding:NSUTF8StringEncoding]
name:@"sessionKey"];
}
error:nil];
}
request.timeoutInterval = timeout;
}
return request;
}
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
fromFile:(NSURL *)fileURL
progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock
completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler