如何将图像发送到远程服务器

时间:2013-01-11 06:09:56

标签: objective-c

如何从下面的代码向远程服务器发送图像最后一个字符串放在图像

NSString * reqString = [NSString stringWithFormat:@“http://projeceads.info/spir/productinfo/productadd/%@/%@/%@/%@/%@/%@/%@/%@ ”,OWNERID,productNameTxt.text,QuantityTxt.text,sizeTxt.text,ageTxt.text,priceTxt.text,descriptionView.text,imgstr]; NSURL * reqUrl = [NSURL URLWithString:reqString]; NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:reqUrl] delegate:self];
[连接开始]; }

2 个答案:

答案 0 :(得分:3)

有两种方法可以将数据上传到Web服务器:GET或POST

使用GET,您必须将您希望Web服务器拥有的所有信息都放入URL中。 使用POST,您还可以将信息放入POST正文中。

根据您的问题,您似乎尝试通过GET请求上传图片并“将图片附加到网址”。

这样的图像是二进制数据,未压缩为RGBA值,通常每次宽度乘以1个字节乘以高度。由于这是大多数用途的数据太多,人们喜欢压缩图像。 UIImagePNGRepresentation允许您以PNG或JPEG格式创建数据。

但是,如果您的网络服务器无法处理二进制数据,即使这种压缩格式也可能无法通过HTTP传输。因为你不能在HTTP中使用0-255的所有值,它本身就是纯文本格式。历史上,HTTP仅使用7位ASCII字符(0-127),可以安全传输。因此,您要在某处发送的任何二进制数据都必须编码为仅使用安全字符的表示形式。最普遍的这种编码方案是“base64”。

base64编码的一个缺点是它需要将发送的数据量增加大约三分之一。此外,大多数现代Web服务器实际上都可以接收二进制发布数据。

我在这里写了如何通过POST将图像上传到TwitPic。您需要将正确的标题组合在一起并组成POST主体,如下所示:http://www.cocoanetics.com/2010/02/uploading-uiimages-to-twitpic/

如果您的网络服务器支持,我也建议您上传图片。这不是您正在寻找的答案,但这是您应该采取的方法。

现在实际回答你的问题“我如何创建一个包含图像表示的URL”(因为我的服务器管理员太愚蠢了,无法构建一个也接受POST的脚本)......

步骤如下:

  1. 使用UIImage创建压缩表示...表示
  2. Base64编码1
  3. 的输出
  4. 对2
  5. 的输出进行URL编码
  6. 附加到网址字符串
  7. 发送GET请求
  8. for base64-encoding我使用着名的Matt Gallagher创建的方法:https://github.com/Cocoanetics/DTFoundation/blob/master/Core/Source/NSData%2BBase64.h

    URL编码是必要的,因为在格式良好的URL中使用的字符数比在7位HTTP中使用的字符数更少。对于URL编码,我使用此NSString类别。 https://github.com/Cocoanetics/DTFoundation/blob/master/Core/Source/NSString%2BDTURLEncoding.h

    总结:尽管有可能你不应该通过GET URL发送图像。像普通人一样发送它们作为POST请求,并以二进制或base64编码格式将图像数据放入POST主体。

    PS:我在这里发布的这个答案的更多编辑版本:http://www.cocoanetics.com/2013/01/how-to-send-image-to-remote-server/

答案 1 :(得分:0)

你必须发送NSData

NSData *attachmentData = UIImagePNGRepresentation(UIImage);

这不是一个好问题,你可以找到很多相关的帖子 在发布任何问题之前,请先尝试在Google上搜索。

http://allseeing-i.com/ASIHTTPRequest/How-to-use

相关问题