【发布时间】:2014-07-14 23:47:39
【问题描述】:
作为参考,这是我在 iOS/Objective-c 中尝试做的工作的 android/Java 版本
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());
}
总结:基本上我可以将图像和随附的元数据发送到 blobstore。例如,元数据可以帮助我识别图片的发送者。
现在尝试在 iOS 中做同样的事情,我编写了下面的代码。但无论出于何种原因,元数据都没有保存在 blobstore 中。我尝试了很多不同的东西,但我仍然一无所获。我尝试将元数据字符串更改为 base-64,但没有成功。
IOS 代码
-(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 = @{
@"yellow”:self. yellow,
@"red":self. red,
@"green”:self.green,
@“blue”:self. blue,
@“spouse”:self.spouse,
@"isFamouse”:@”true”};//you get the idea
我在哪里?
鉴于这种设计适用于 android,我知道这是可能的,特别是因为 http 在涉及语言时应该是不可知的。所以问题被简化为将字符串从 iOS 保存到 Google blobstore。
我开始赏金,希望有人能帮助我解决这个问题(也许是 google blobstore-iOS 专家)。我还注意到其他人也问了几乎相同的问题,但没有答案。我问过这个问题的其他方式:
AFHTTPRequestOperationManager post multi-part request not working
【问题讨论】:
-
仅供参考:目的地是 Google Blobstore(如果这很重要的话)
-
本网站不是免费的代码翻译服务。先做好自己的工作。如果您有具体问题,请发布相关代码并说明您的问题。
-
@rmaddy 我已经这样做了,现在开始赏金了。
-
对于 java 代码参考:
HttpMultipartMode.BROWSER_COMPATIBLE使 MultipartEntity 省略 'Content-Type' 和 'Content-Transfer-Encoding' 标志以与旧 Web 服务器兼容。 AFNetworking 有什么等价物吗?还是 iOS/Objective-c?
标签: ios objective-c afnetworking google-cloud-endpoints blobstore