【发布时间】:2014-08-03 06:12:34
【问题描述】:
这是我在 Git Doc 中使用的模板
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
这是我的使用方法
-(void)postMultipartToServer
{
if (!self.destinationUrl) {
return;
}
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSLog(@"IS dictionary empty? %@", self.textDictionary);
[manager POST:self.destinationUrl
parameters:self.textDictionary
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
if ([self.imageDictionaries count]>0)
for (NSDictionary *imgDic in self.imageDictionaries) {
[formData appendPartWithFileData:UIImagePNGRepresentation([imgDic objectForKey:@"image"])
name:[imgDic objectForKey:@"name"]//@"image"
fileName:[imgDic objectForKey:@"fileName"]//@"image.png"
mimeType:[imgDic objectForKey:@"mimeType"]//@"image/png"
];
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
无论出于何种原因,图像都已成功发布到服务器,但文本部分却没有。所以这是我的文本字典
NSDictionary *textDictionary = @{
@"userid”:self.userid,
@"phone":self.phone,
@"token”:self.userToken,
@“age”:self.ageAsString,
@“spouse”:self.spouse,
@"isFamouse”:@”true"};
例如,服务器不断抱怨phone 为空。当我查看服务器日志时,textDictionary 中的任何数据都没有发送到服务器。
在有人说这是我的服务器之前:iOS 不是唯一的客户端。所有其他客户端工作正常。无论出于何种原因,textDictionary 都没有被发送。
我欢迎熟悉 AFHTTPRequestOperationManager 的人提供任何帮助。
这是错误日志
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo=0x170477840 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x178225140>
另外,为了阻止失败,我之前进行了编辑但没有更改:我添加了
AFSecurityPolicy *policy = [[AFSecurityPolicy alloc] init];
[policy setAllowInvalidCertificates:YES];
AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
[operationManager setSecurityPolicy:policy];
operationManager.requestSerializer = [AFJSONRequestSerializer serializer];
operationManager.responseSerializer = [AFJSONResponseSerializer serializer];
以下是可以正常工作的等效 Android 代码供参考
public static void saveTextsAndImagesOnServer(List<byte[]> images, long someID1, String servingUrl, boolean someFlag)
throws ClientProtocolException, IOException {
Log.d(TAG, "saveTextsAndImagesOnServer started ");
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(servingUrl);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
AdditionData extr = AdditionData.getInstance();
reqEntity.addPart("red", new ByteArrayBody(("" + extr.getred()).getBytes(), "red"));
reqEntity.addPart("yellow", new ByteArrayBody(extr.getyellow.getBytes(), "yellow"));
reqEntity.addPart("green", new ByteArrayBody(extr.getgreen().getBytes(), "green"));
reqEntity.addPart("blue", new ByteArrayBody((extr.getblue()).getBytes(), "blue"));
reqEntity.addPart("someID1", new ByteArrayBody(("" + someID1).getBytes(), "someID1"));
if (someFlag) {
reqEntity.addPart("someFlag", new ByteArrayBody("true".getBytes(), "someFlag"));
}
int i = 0;
for (byte[] img : images) {
ByteArrayBody image = new ByteArrayBody(img, "img" + i++ + ".png");
reqEntity.addPart("image", image);
}
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
Log.d(TAG, "saveTextsAndImagesOnServer ended with response " + response.toString());
}
【问题讨论】:
-
我的服务器是谷歌应用引擎
-
更准确地说,目标是应用引擎 blob 存储。
-
我如何知道我使用的是 afnetworking 1 还是 afnetworking 2?我通过点击
download zip在github.com/AFNetworking/AFNetworking使用手动下载 -
下载 zip 会给你 2.0.此外,序列化程序类在 2.0 之前不存在
-
@Hunkpapa 谢谢。所以我有2.0。现在我开始认为我的问题是我需要将我的 NSStrings 转换为 base-64 字节数组。你知道怎么做吗? Blobstore 可能需要它,因为这是其他客户端正在使用的。
标签: objective-c ios7 afnetworking-2 blobstore afhttprequestoperation