多部分/表格.目标数据-C/SWIFT

多部分/表格.目标数据-C/SWIFT

因此,这个HTML代码以正确的格式为我提交数据。

<form action="https://www.example.com/register.php" method="post" enctype="multipart/form-data">
    Name: <input type="text" name="userName"><BR />
    Email: <input type="text" name="userEmail"><BR />
    Password: <input type="text" name="userPassword"><BR />
    Avatar: <input type="file" name="avatar"><BR />
    <input type="submit"></form>

我已经研究了很多关于如何在IOS上发布多部分/表单数据的文章,但是没有人真正解释如果有正常的参数和文件上传的话该怎么做。

你能帮我把这个代码发到Obj-C吗?

谢谢!


慕侠2389804
浏览 495回答 3
3回答

qq_笑_17

该进程如下:创建字典userName,&nbsp;userEmail,和userPassword参数。NSDictionary&nbsp;*params&nbsp;=&nbsp;@{@"userName"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;@"rob", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"userEmail"&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;@"rob@email.com", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"userPassword"&nbsp;:&nbsp;@"password"};确定图像的路径:NSString&nbsp;*path&nbsp;=&nbsp;[[NSBundle&nbsp;mainBundle]&nbsp;pathForResource:@"avatar"&nbsp;ofType:@"png"];创建请求:NSString&nbsp;*boundary&nbsp;=&nbsp;[self&nbsp;generateBoundaryString];//&nbsp;configure&nbsp;the&nbsp;requestNSMutableURLRequest&nbsp;*request&nbsp;=&nbsp;[[NSMutableURLRequest&nbsp;alloc]&nbsp;initWithURL:url];[request&nbsp;setHTTPMethod:@"POST"];//&nbsp;set&nbsp;content&nbsp;typeNSString&nbsp;*contentType&nbsp;=&nbsp;[NSString&nbsp;stringWithFormat:@"multipart/form-data;&nbsp;boundary=%@",&nbsp;boundary];[request&nbsp;setValue:contentType&nbsp;forHTTPHeaderField:&nbsp;@"Content-Type"];//&nbsp;create&nbsp;bodyNSData&nbsp;*httpBody&nbsp;=&nbsp;[self&nbsp;createBodyWithBoundary:boundary&nbsp;parameters:params&nbsp;paths:@[path]&nbsp;fieldName:fieldName];这是上面用于构建请求主体的方法:-&nbsp;(NSData&nbsp;*)createBodyWithBoundary:(NSString&nbsp;*)boundary &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters:(NSDictionary&nbsp;*)parameters &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paths:(NSArray&nbsp;*)paths &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldName:(NSString&nbsp;*)fieldName&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSMutableData&nbsp;*httpBody&nbsp;=&nbsp;[NSMutableData&nbsp;data]; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;add&nbsp;params&nbsp;(all&nbsp;params&nbsp;are&nbsp;strings) &nbsp;&nbsp;&nbsp;&nbsp;[parameters&nbsp;enumerateKeysAndObjectsUsingBlock:^(NSString&nbsp;*parameterKey,&nbsp;NSString&nbsp;*parameterValue,&nbsp;BOOL&nbsp;*stop)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"--%@\r\n",&nbsp;boundary]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"Content-Disposition:&nbsp;form-data;&nbsp;name=\"%@\"\r\n\r\n",&nbsp;parameterKey]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"%@\r\n",&nbsp;parameterValue]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;}]; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;add&nbsp;image&nbsp;data &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(NSString&nbsp;*path&nbsp;in&nbsp;paths)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*filename&nbsp;&nbsp;=&nbsp;[path&nbsp;lastPathComponent]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSData&nbsp;&nbsp;&nbsp;*data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[NSData&nbsp;dataWithContentsOfFile:path]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*mimetype&nbsp;&nbsp;=&nbsp;[self&nbsp;mimeTypeForPath:path]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"--%@\r\n",&nbsp;boundary]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"Content-Disposition:&nbsp;form-data;&nbsp;name=\"%@\";&nbsp;filename=\"%@\"\r\n",&nbsp;fieldName,&nbsp;filename]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"Content-Type:&nbsp;%@\r\n\r\n",&nbsp;mimetype]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:data]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[@"\r\n"&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[httpBody&nbsp;appendData:[[NSString&nbsp;stringWithFormat:@"--%@--\r\n",&nbsp;boundary]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;httpBody;}上面使用的实用程序方法如下:@import&nbsp;MobileCoreServices;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;only&nbsp;needed&nbsp;in&nbsp;iOS-&nbsp;(NSString&nbsp;*)mimeTypeForPath:(NSString&nbsp;*)path&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;get&nbsp;a&nbsp;mime&nbsp;type&nbsp;for&nbsp;an&nbsp;extension&nbsp;using&nbsp;MobileCoreServices.framework &nbsp;&nbsp;&nbsp;&nbsp;CFStringRef&nbsp;extension&nbsp;=&nbsp;(__bridge&nbsp;CFStringRef)[path&nbsp;pathExtension]; &nbsp;&nbsp;&nbsp;&nbsp;CFStringRef&nbsp;UTI&nbsp;=&nbsp;UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,&nbsp;extension,&nbsp;NULL); &nbsp;&nbsp;&nbsp;&nbsp;assert(UTI&nbsp;!=&nbsp;NULL); &nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*mimetype&nbsp;=&nbsp;CFBridgingRelease(UTTypeCopyPreferredTagWithClass(UTI,&nbsp;kUTTagClassMIMEType)); &nbsp;&nbsp;&nbsp;&nbsp;assert(mimetype&nbsp;!=&nbsp;NULL); &nbsp;&nbsp;&nbsp;&nbsp;CFRelease(UTI); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mimetype;}-&nbsp;(NSString&nbsp;*)generateBoundaryString&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[NSString&nbsp;stringWithFormat:@"Boundary-%@",&nbsp;[[NSUUID&nbsp;UUID]&nbsp;UUIDString]];}然后提交请求。这里有很多选择。例如,如果使用NSURLSession,您可以创建NSURLSessionUploadTask:NSURLSession&nbsp;*session&nbsp;=&nbsp;[NSURLSession&nbsp;sharedSession];&nbsp;&nbsp;//&nbsp;use&nbsp;sharedSession&nbsp;or&nbsp;create&nbsp;your&nbsp;ownNSURLSessionTask&nbsp;*task&nbsp;=&nbsp;[session&nbsp;uploadTaskWithRequest:request&nbsp;fromData:httpBody&nbsp;completionHandler:^(NSData&nbsp;*data,&nbsp;NSURLResponse&nbsp;*response,&nbsp;NSError&nbsp;*error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"error&nbsp;=&nbsp;%@",&nbsp;error); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*result&nbsp;=&nbsp;[[NSString&nbsp;alloc]&nbsp;initWithData:data&nbsp;encoding:NSUTF8StringEncoding]; &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"result&nbsp;=&nbsp;%@",&nbsp;result);}];[task&nbsp;resume];或者您可以创建一个NSURLSessionDataTask:request.HTTPBody&nbsp;=&nbsp;httpBody;NSURLSessionTask&nbsp;*task&nbsp;=&nbsp;[session&nbsp;dataTaskWithRequest:request&nbsp;completionHandler:^(NSData&nbsp;*data,&nbsp;NSURLResponse&nbsp;*response,&nbsp;NSError&nbsp;*error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"error&nbsp;=&nbsp;%@",&nbsp;error); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*result&nbsp;=&nbsp;[[NSString&nbsp;alloc]&nbsp;initWithData:data&nbsp;encoding:NSUTF8StringEncoding]; &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"result&nbsp;=&nbsp;%@",&nbsp;result);}];[task&nbsp;resume];以上假设服务器只是返回文本响应。最好是服务器返回JSON,在这种情况下,您可以使用NSJSONSerialization而不是NSString方法initWithData.同样,我使用的完成块表示NSURLSession上面,但是也可以使用更丰富的基于委托的版本。但这似乎超出了这个问题的范围,所以我将由你们来决定。但希望这说明了这个想法。如果我不指出这一点,比上面的容易得多,你可以用AFNetwork,重复上面的步骤1和2,然后只调用:AFHTTPSessionManager&nbsp;*manager&nbsp;=&nbsp;[AFHTTPSessionManager&nbsp;manager];manager.responseSerializer&nbsp;=&nbsp;[AFHTTPResponseSerializer&nbsp;serializer];&nbsp;//&nbsp;only&nbsp;needed&nbsp;if&nbsp;the&nbsp;server&nbsp;is&nbsp;not&nbsp;returning&nbsp;JSON;&nbsp;if&nbsp;web&nbsp;service&nbsp;returns&nbsp;JSON,&nbsp;remove&nbsp;this&nbsp;lineNSURLSessionTask&nbsp;*task&nbsp;=&nbsp;[manager&nbsp;POST:urlString&nbsp;parameters:params&nbsp;constructingBodyWithBlock:^(id<AFMultipartFormData>&nbsp;formData)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSError&nbsp;*error; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(![formData&nbsp;appendPartWithFileURL:[NSURL&nbsp;fileURLWithPath:path]&nbsp;name:@"avatar"&nbsp;fileName:[path&nbsp;lastPathComponent]&nbsp;mimeType:@"image/png"&nbsp;error:&error])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"error&nbsp;appending&nbsp;part:&nbsp;%@",&nbsp;error); &nbsp;&nbsp;&nbsp;&nbsp;}}&nbsp;&nbsp;progress:nil&nbsp;success:^(NSURLSessionTask&nbsp;*task,&nbsp;id&nbsp;responseObject)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"responseObject&nbsp;=&nbsp;%@",&nbsp;responseObject);}&nbsp;failure:^(NSURLSessionTask&nbsp;*task,&nbsp;NSError&nbsp;*error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"error&nbsp;=&nbsp;%@",&nbsp;error);}];if&nbsp;(!task)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Creation&nbsp;of&nbsp;task&nbsp;failed.");}

四季花海

尝试将其用于具有不同MIME类型的视频和图像数据。NSDictionary&nbsp;*param;AFHTTPRequestOperationManager&nbsp;*manager&nbsp;=&nbsp;[AFHTTPRequestOperationManager&nbsp;manager];//&nbsp;1.&nbsp;Create&nbsp;`AFHTTPRequestSerializer`&nbsp;which&nbsp;will&nbsp;create&nbsp;your&nbsp;request.AFHTTPRequestSerializer&nbsp;*serializer&nbsp;=&nbsp;[AFHTTPRequestSerializer&nbsp;serializer];NSMutableURLRequest&nbsp;*request;NSData&nbsp;*fileData;if&nbsp;([objDoc.url&nbsp;containsString:@".mp4"])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;manager.responseSerializer.acceptableContentTypes&nbsp;=&nbsp;[manager.responseSerializer.acceptableContentTypes&nbsp;setByAddingObject:@"application/json"]; &nbsp;&nbsp;&nbsp;&nbsp;[serializer&nbsp;setValue:@"video/mp4"&nbsp;forHTTPHeaderField:@"Content-Type"]; &nbsp;&nbsp;&nbsp;&nbsp;manager.requestSerializer&nbsp;=&nbsp;serializer;}//&nbsp;2.&nbsp;Create&nbsp;an&nbsp;`NSMutableURLRequest`.NSLog(@"filename&nbsp;=%@",objDoc.url);request=&nbsp;[serializer&nbsp;multipartFormRequestWithMethod:@"POST"&nbsp;URLString:strUrl&nbsp;parameters:param&nbsp;constructingBodyWithBlock:^(id<AFMultipartFormData>&nbsp;formData)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([objDoc.url&nbsp;containsString:@".mp4"])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[formData&nbsp;appendPartWithFileData:fileData &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:@"File" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName:@"video.mp4" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mimeType:@"video/mp4"]; &nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[formData&nbsp;appendPartWithFileData:fileData &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:@"File" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName:@"image.jpeg" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mimeType:@"image/jpeg"]; &nbsp;&nbsp;&nbsp;&nbsp;}}&nbsp;error:nil];//&nbsp;3.&nbsp;Create&nbsp;and&nbsp;use&nbsp;`AFHTTPRequestOperationManager`&nbsp;to&nbsp;create&nbsp;an&nbsp;`AFHTTPRequestOperation`&nbsp;from&nbsp;the&nbsp;`NSMutableURLRequest`&nbsp;that&nbsp;we&nbsp;just&nbsp;created.self.objeDocument.isUploading&nbsp;=&nbsp;[NSNumber&nbsp;numberWithInt:1];self.operation&nbsp;=&nbsp;[manager&nbsp;HTTPRequestOperationWithRequest:request &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:^(AFHTTPRequestOperation&nbsp;*operation,&nbsp;id&nbsp;responseObject)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Success&nbsp;%@",&nbsp;responseObject); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;failure:^(AFHTTPRequestOperation&nbsp;*operation,&nbsp;NSError&nbsp;*error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UIAlertView&nbsp;*alert&nbsp;=&nbsp;[[UIAlertView&nbsp;alloc]initWithTitle:@"Error!"&nbsp;message:@"The&nbsp;document&nbsp;attached&nbsp;has&nbsp;failed&nbsp;to&nbsp;upload."&nbsp;delegate:nil&nbsp;cancelButtonTitle:@"OK"&nbsp;otherButtonTitles:nil,&nbsp;nil]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[alert&nbsp;show]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self.operation&nbsp;cancel]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Failure&nbsp;%@",&nbsp;error.description); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}];//&nbsp;4.&nbsp;Set&nbsp;the&nbsp;progress&nbsp;block&nbsp;of&nbsp;the&nbsp;operation.[self.operation&nbsp;setUploadProgressBlock:^(NSUInteger&nbsp;__unused&nbsp;bytesWritten, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;long&nbsp;totalBytesWritten, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;long&nbsp;totalBytesExpectedToWrite)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Wrote&nbsp;%lld/%lld",&nbsp;totalBytesWritten,&nbsp;totalBytesExpectedToWrite); &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;progress&nbsp;=&nbsp;(float)totalBytesWritten/(float)totalBytesExpectedToWrite;}];//&nbsp;5.&nbsp;Begin![self.operation&nbsp;start];
打开App,查看更多内容
随时随地看视频慕课网APP