我之前使用this method将图片发布到服务器,但这有点复杂,因为我必须自己添加标题和边界。昨天我发现了一个名为Resty的项目--“一个简单的Objective-C client for iOS and Mac”。然而,在阅读了它的所有文档后,我找不到任何上传图像文件的方法。请帮帮忙,非常感谢。
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:@"this is a title" forKey:@"title"];
// ***How can I add an image by Resty?***
[params setObject:UIImageJPEGRepresentation(self.image, 1.0) forKey:@"image"];
LRRestyClient *client = [LRResty client];
[client setUsername:userId password:userToken];
[client post:APIImageUrl payload:params withBlock:^(LRRestyResponse *response){
NSLog(@"Done");
}];发布于 2012-08-23 15:38:42
我认为这个框架不能正确处理图像数据和自定义参数,您可以按照这个主题创建正确的NSData格式
How to upload image and text using HTTP POST?
或者,如果你个人想要更成熟的框架,我建议你使用restkit。在我的项目中,我使用以下示例代码将图像发送到rest服务
RKObjectManager *service = restkit_manager; //initialized previously
[service loadObjectsAtResourcePath:@"/api/ChangeProfileImage" usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.method = RKRequestMethodPOST;
loader.cachePolicy = RKRequestCachePolicyNone;
loader.objectMapping = (RKObjectMapping *) [service.mappingProvider mappingForKeyPath:MAPPING_PROFILE_IMAGE_UPDATE];
NSMutableDictionary *params_dict = [NSMutableDictionary new];
//custom parameters
[params_dict setValue:UserKey forKey:@"UserKey"];
RKParams *params = [RKParams paramsWithDictionary:params_dict];
//encoded image
[params setData:data MIMEType:@"image/png" forParam:@"FileName"];
loader.params = params;
loader.serializationMIMEType = RKMIMETypeJSON;
}];此幻灯片可能会提供idea http://www.slideshare.net/tkalapun/restfull-with-restkit
发布于 2012-08-24 13:52:29
我使用的是ASIHTTPRequest,它非常简单和强大。我认为使用这个库是另一种选择。
我的示例代码是...
NSURL *url = [NSURL URLWithString:@"http://endpoint"];
NSData *data = [self addMetadata:UIImageJPEGRepresentation(self.image, 1.0)];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[ASIFormDataRequest setDefaultTimeOutSeconds:90];
[ASIFormDataRequest setShouldThrottleBandwidthForWWAN:YES];
[request setNumberOfTimesToRetryOnTimeout:3];
[request setAllowCompressedResponse:NO];
[request setData:data withFileName:@"photo.jpg" andContentType:@"image/jpeg" forKey:@"image"];
[request startSynchronous];https://stackoverflow.com/questions/12033820
复制相似问题