有两种方法可以将数据上传到 Web 服务器:GET 或 POST
使用 GET,您必须将希望 Web 服务器拥有的所有信息放入 URL。使用 POST,您还可以将信息放入 POST 正文中。
从您的问题看来,您似乎试图通过 GET 请求上传图像并“将图像附加到 URL”。
这样的图像是二进制数据,或者未压缩为 RGBA 值,通常为 1 字节,每次乘以宽度乘以高度。由于这对于大多数用途来说数据太多,因此人们喜欢压缩图像。UIImagePNGRepresentation 允许您以 PNG 或 JPEG 格式创建数据。
但是,如果您的网络服务器无法处理二进制数据,即使这种压缩格式也可能无法通过 HTTP 传输。因为您不能在本身是纯文本格式的 HTTP 中使用 0-255 的所有值。从历史上看,HTTP 仅使用可以安全传输的 7 位 ASCII 字符 (0-127)。因此,您要发送到某处的任何二进制数据都必须编码为仅使用安全字符的表示形式。最流行的这种编码方案是“base64”。
base64 编码的一个缺点是它将您需要发送的数据量增加了大约三分之一。大多数现代网络服务器实际上也可以接收二进制发布数据。
我在这里写了如何通过 POST 将图像上传到 TwitPic。您需要将正确的标题放在一起并组成一个 POST 正文,如下所示:http: //www.cocoanetics.com/2010/02/uploading-uiimages-to-twitpic/
如果您的网络服务器支持,我也建议您使用这种方式上传图片。这不是您要寻找的答案,而是您应该采取的方法。
现在要实际回答您的问题“如何创建包含图像表示的 URL”(因为我的服务器管理员太愚蠢了,无法为我构建一个也可以接受 POST 的脚本)...
步骤是:
- 使用 UIImage 创建压缩表示...表示
- Base64 编码从 1 开始的输出
- 对 2 的输出进行 URL 编码
- 附加到 URL 字符串
- 发送 GET 请求
对于 base64 编码,我使用著名的 Matt Gallagher 创建的方法:https ://github.com/Cocoanetics/DTFoundation/blob/master/Core/Source/NSData%2BBase64.h
URL 编码是必要的,因为与 7 位 HTTP 相比,在格式良好的 URL 中合法使用的字符更少。对于 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/