我正在處理的項目需要上傳視頻。上傳視頻的post API調用需要多部分機構。我試圖使用的代碼包含在問題的底部。AFNetworking V 2是否支持非流式多部分後臺上傳任務?
該代碼完美適用於[NSURLSessionConfiguration defaultSessionConfiguration]
。
如果我將配置更改爲[NSURLSessionConfiguration backgroundSessionConfiguration:@"Test Id"]
,代碼崩潰是因爲後臺會話僅支持文件上載。錯誤是:
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Upload tasks in background sessions must be from a file'
所有這些可在以下方法中使用使用AFMultipartBodyStream類多部分追加方法。這個類傳輸上傳,所以它不能用於後臺會話,因爲流不是文件。
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer]
multipartFormRequestWithMethod:@"POST"
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSError *error = nil;
[formData appendPartWithFileURL:fileURL
name:@"uploadFile"
fileName:[fileURL lastPathComponent]
mimeType:@"video/quicktime"
error:&error];
} error:&error];
是否有可能有一個NSURLSessionUploadTask與多部主體,可以在使用backgroundSessionConfiguration一個AFHTTPSessionManager運行?
見下面的示例代碼:
NSURL *APIURL = [NSURL URLWithString:@"https://www.test.com/uploadVideo"];
NSError *error = nil;
NSDictionary *params = @{ @"token" : @"d5bcf6c2-99ec-4de7-bd87-71918b633b3a",
@"title" : @"Test_Video" };
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer]
multipartFormRequestWithMethod:@"POST"
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSError *error = nil;
[formData appendPartWithFileURL:fileURL
name:@"uploadFile"
fileName:filePath
mimeType:@"video/quicktime"
error:&error];
} error:&error];
[request addValue:@"Basic 123456789" forHTTPHeaderField:@"Authorization"];
NSLog(@"%@", error);
__weak __typeof(self)weakSelf = self;
__block NSURLSessionUploadTask *task =
[super
uploadTaskWithStreamedRequest:request
progress:progress
completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
[weakSelf handleCompletionForTask:task
responseObject:responseObject
error:error
success:successBlock
failure:failureBlock];
}];
[task setTaskDescription:endpoint.name];
[task resume];
我也面臨同樣的問題,但問題是沒有上傳任務必須使用的文檔[NSURLSession uploadTaskWithRequest:fromFile:]。在iOS7中,我們在使用uploadTaskWithStreamedRequest時遇到異常:使用後臺配置,但在iOS8上沒有異常,並且當應用處於前臺時一切正常,但一旦它進入後臺,NSStreamEventEndEncountered被調用。如果你知道的話,請向我推薦任何有關這件事的文檔。 –
我發現這是經驗性的,但請參閱[後臺傳輸注意事項](https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW44),特別是「僅支持上載和下載任務(無數據任務)」。並從一個相關的(SO回答)(http://stackoverflow.com/questions/19985353/nsurlsession-uploading-assets-with-background-transfer)「與Tech Talks事件的蘋果工程師談話,他證實背景NSURLSession只支持文件網址「。 – JVillella