我正在使用下面的代码来 HTTP POST 一个包含 JPEG 图像的多部分 Web 表单。
代码:
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:nameField.text forKey:@"name"];
[params setObject:emailField.text forKey:@"email"];
[params setObject:titleField.text forKey:@"title"];
[params setObject:dateString forKey:@"link"];
[params setObject:descriptionTV.text forKey:@"content"];
[params setObject:tag forKey:@"tags"];
NSData* sendData = UIImageJPEGRepresentation(uploadedPhoto.image, 1.0);
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://example.com/"]];
NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST"
path:@"form"
parameters:params
constructingBodyWithBlock:^(id <AFMultipartFormData>formData)
{
[formData appendPartWithFileData:sendData
name:@"image"
fileName:@"image.jpeg"
mimeType:@"image/jpeg"];
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"SUCCESS! %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"FAILED!!! %@", operation.responseString);
}];
[operation start];
网页表格:
<input type="text" name="name" id="name" value="" />
<input type="text" name="email" id="email" value="" />
<input type="text" name="title" id="title" value="" />
<input type="text" name="link" id="link" value="" />
<input type="text" name="content" id="content" value="" />
<input type="text" name="tags" id="tags" value="" />
<input type="file" name="image" id="image" value="" />
每次我运行代码时,图像上传都很顺利,直到上传进度即将完成(约 99.5% 完成)。该操作的completionBlockWithSuccess:failure:
块永远不会启动,应用程序只是冻结在那里。
谁能帮我解决这个问题?我不知道我在这里做错了什么。
编辑:
我做了更多的调查,发现即使请求路径无效,它也一样,但我很确定我没有输入错误的表单路径。另外,当我用 替换constructingBodyWithBlock
块时nil
,它会正常工作。
编辑2:
我在 AFNetworking 的 Github 上做了一些窥探,发现了 Github 问题帖子和Stack Overflow 上的类似帖子。我尝试了使用[httpClient enqueueHTTPRequestOperation:operation];
而不是[operation start];
制作httpClient
单例,但同样的问题仍然存在。