[英]Image is not uploading into webservice
我想将图像上传到Web服务,但是当我上传图像时,仅保存图像名称,而不保存图像。
请找到代码和图像以供参考。
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissModalViewControllerAnimated:YES];
NSData *image = UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 0.1);
NSMutableString *urlString = [[NSMutableString alloc] initWithFormat:@"name=thefile&&filename=recording"];
[urlString appendFormat:@"%@", image];
NSData *postData = [urlString dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSString *baseurl = @"http://192.168.2.34/Service1.svc/upload/filename.png";
NSURL *url = [NSURL URLWithString:baseurl];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod: @"POST"];
[urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
[urlRequest setValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPBody:postData];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];
[connection start];
NSLog(@"Started!");
}
上传图像后,图像名称显示如下:
但是当我打开图像时显示为nil。
我不确定出什么问题..请帮助我。
提前致谢。
这些行是错误的:
NSData *image = UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 0.1);
NSMutableString *urlString = [[NSMutableString alloc] initWithFormat:@"name=thefile&&filename=recording"];
[urlString appendFormat:@"%@", image];
NSData *postData = [urlString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
...
[urlRequest setValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPBody:postData];
用。。。来代替:
NSData *image = UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 0.1);
...
[urlRequest setHTTPBody:image];
另外,您可能应该将0.1更改为0.8或其他值,否则质量会很糟糕。
您还需要确保服务器正确读取了数据。 这取决于您使用服务器端的方式...在PHP中,这是您的操作方式:
$data = file_get_contents('php://input');
file_put_contents($data, 'filename.jpg');
问题出在:
[urlString appendFormat:@"%@", image];
您在发布数据中链接了NSData对象的描述,这是一个错误。 要上传二进制文件,您需要序列化数据或使用多部分/表单数据POST请求。
这些是2个解决方案:
1)使用此类别在Base64中转换图像NSData(已测试)
https://github.com/l4u/NSData-Base64
然后做
[urlString appendFormat:@"&image=%@", [image base64EncodedString]];
您需要在服务器上将base64数据转换回使用(在PHP中)
http://www.php.net/manual/en/function.base64-decode.php
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.