[英]HTTP POST request to send an image
我正在尝试通过HTTP POST请求将图像发布到Web服务。
API文档说,图像参数应该是“您要分析的图像的二进制文件数据-仅PNG,GIF和JPG”。
这是我要使用的代码:
UIImage *image = [UIImage imageNamed:@"air.jpg"];
NSData *imgData = UIImageJPEGRepresentation(image, 1.0);
NSURLResponse *response;
NSError *error = nil;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://pictaculous.com/api/1.0/"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:imgData];
NSData *receivedData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if(error!=nil) {
NSLog(@"web service error:%@",error);
}
else {
if(receivedData !=nil) {
NSError *Jerror = nil;
NSDictionary* json =[NSJSONSerialization
JSONObjectWithData:receivedData
options:kNilOptions
error:&Jerror];
if(Jerror!=nil) {
NSLog(@"json error:%@",Jerror);
}
}
}
问题是,在JSON响应中,我总是收到错误“您必须提供图像”,好像接收到的图像格式不正确。
“ UIImageJPEGRepresentation”不是从图像获取二进制数据的正确方法吗?
我还有其他方法可以从JPEG图像中获取二进制文件数据吗?
谢谢,Corrado
如果要简化代码,则可以使用简单的NSURLConnection包装器,例如STHTTPRequest 。
STHTTPRequest *r = [STHTTPRequest requestWithURLString:@"http://pictaculous.com/api/1.0/"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"];
NSData *data = [NSData dataWithContentsOfFile:path];
[r addDataToUpload:data parameterName:@"image"];
r.completionBlock = ^(NSDictionary *headers, NSString *body) {
NSLog(@"-- %@", body);
};
r.errorBlock = ^(NSError *error) {
NSLog(@"-- error: %@", error);
};
[r startAsynchronous];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.