AFNetworking 上传文件

Posted

技术标签:

【中文标题】AFNetworking 上传文件【英文标题】:AFNetworking Uploading a file 【发布时间】:2011-11-22 21:39:59 【问题描述】:

有没有人使用 的完整实现。我在互联网上找到了一些代码,但它不完整。我找到的代码在这里:

AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://my.client.server.com"]];


NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:[fieldName text] forKey:@"field01_nome"];
[parameters setObject:[fieldSurname text] forKey:@"field02_cognome"];



NSMutableURLRequest *myRequest = [client multipartFormRequestWithMethod:@"POST" path:@"/Contents/mail/sendToForm.jsp" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) 
    [formData appendPartWithFileData:myNSDataToSend mimeType:@"image/jpeg" name:@"alleagto"];
];


AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:myRequest success:^(id object) 
    NSLog(@"Success");

 failure:^(NSHTTPURLResponse *response, NSError *error) 
    NSLog(@"Fail");

];


[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) 
    NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);

];

queue = [[[NSOperationQueue alloc] init] autorelease];
[queue addOperation:operation];

我在以下几行中遇到错误:

 [formData appendPartWithFileData:myNSDataToSend mimeType:@"image/jpeg" name:@"alleagto"];

在 myNSDataToSend。

这里:

AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:myRequest success:^(id object) 
    NSLog(@"Success");

 failure:^(NSHTTPURLResponse *response, NSError *error) 
    NSLog(@"Fail");

];

错误是:

找不到类方法'+HTTPRequestOperationWithRequest:success:failure'(返回类型默认为'id')

在这方面的任何帮助以及使用 AFNetworks 上传都会很棒。

谢谢。

【问题讨论】:

【参考方案1】:

首先,确保您已下载最新版本的 AFNetworking。

AFHTTPRequestOperation +HTTPRequestOperationWithRequest:success:failure: 被删除了几个版本。相反,您可以执行 [[AFHTTPRequestOperation alloc] initWithRequest:...],然后使用直接属性访问器 (operation.completionBlock = ^...) 或 -setCompletionBlockWithSuccess:failure: 设置 completionBlock。请记住,完成块在请求完成下载后执行。

至于多部分表单块,-appendWithFileData:mimeType:name 不久前也被删除了。你想要的方法是-appendPartWithFileData:name:fileName:mimeType:

进行这两项更改,一切都会正常。

【讨论】:

嗯,我仍然 (a) 在 AFHTTPClient.m 中找到该方法,并且 (b) 出现编译错误。除了我的错误说“匿名类的声明必须是一个定义”。我在哪里可以解决这个问题? @mattt,我可以在使用multipartFormRequestWithMethod 方法上传图像时将内容类型从multipart/form-data; 更改为image/jpeg 吗?需要你的帮助! @AlmasAdilbek 否。您发送的是包含 JPEG 部分的多部分表单,而不是 JPEG 本身。 @mattt 面临同样的问题,正在寻找一些允许我发布一个文件的功能。

以上是关于AFNetworking 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AFNetworking 上传多个文件

AFNetworking 文件上传

AFNetworking:多个文件上传问题

使用 AFNetworking 上传文件

AFNetworking 多文件上传

使用 AFNetworking 上传多个图像或文件,