1

我想将图像上传到网络服务中,但是当我上传它时,只保存图像的名称,而不是图像。

请找到代码和图像供您参考。

    - (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!");

}

上传图片后,图片名称如下:

在此处输入图像描述

但是当我打开图像时显示为零。

在此处输入图像描述

我不确定出了什么问题..请帮助我。

提前致谢。

4

2 回答 2

1

这些行是错误的:

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');
于 2013-07-11T11:46:24.497 回答
0

问题出在:

[urlString appendFormat:@"%@", image];

您正在链接帖子数据中 NSData 对象的描述,这是一个错误。要上传二进制文件,您需要序列化数据或使用 multipart/form-data POST 请求。

这些是2个解决方案:

1)用这个类别转换Base64中的图像NSData(已测试)

https://github.com/l4u/NSData-Base64

然后做

[urlString appendFormat:@"&image=%@", [image base64EncodedString]];

您需要在服务器上使用(在 PHP 中)将 base64 数据转换回来

http://www.php.net/manual/en/function.base64-decode.php

2) iphone编程实现文件上传到HTTP服务器

我希望这有帮助。

于 2013-07-11T12:12:11.083 回答