将图像文件从 IOS 上传到 Web 服务器
Posted
技术标签:
【中文标题】将图像文件从 IOS 上传到 Web 服务器【英文标题】:upload image files from IOS to web server 【发布时间】:2015-10-21 09:32:37 【问题描述】:考虑到 ios9 和 swift 2,在 java 中将图像文件上传到 Web 服务器的最佳方法是什么。
通过搜索,我意识到有人提出了类似的问题,并且网上有许多不同的方法可以上传图片。但是我不确定什么是最好的方法。
我尝试了以下方法,发现上传一张图片大约需要一分钟。
****方法一:****
使用 NSURLSession 并调用 java servlet 的“POST”方法 如example中所述以 JSON 格式发送
按照example 中的说明将图像附加到 httpbody 本身
****方法2:****
使用 NSURL 并调用 javascript 方法,如 example
我还阅读了有关 AFNetworking 2.0 (ex) 的信息,但我不确定它是否可以为上传过程带来任何性能提升。
我们的用户每天可能会拍摄大约 100 张图片,这些图片需要上传到网络服务器进行进一步处理。
请查看并提出您的意见。非常感谢。
【问题讨论】:
【参考方案1】:从您的图像中创建 base64 字符串并将其发送到 Web 服务器。
let imageData = UIImageJPEGRepresentation(imageURL.image!, 0.5)
let base64String = imageData!.base64EncodedStringWithOptions([])
在您的网络服务器中,读取输入图像字符串并按如下方式对其进行解析。
byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image);
然后你可以对字节做任何你喜欢的事情,比如:
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageBytes));
【讨论】:
【参考方案2】:我实际上是在开发一个社交应用程序,并在我个人使用 base64 的 API 上上传照片。
我只需对图像进行编码,因此我有一个编码字符串和 API 解码并将其放在 AWS 上。
我使用的是 Swift 2.0 和 iOS 9。如果你想要一段代码:
// You create a NSData from your image
var imageData = UIImageJPEGRepresentation(imageURL.image!, 0.5)
// You create a base64 string
let base64String = imageData!.base64EncodedStringWithOptions([])
// And you encode it in order to delete any problem of specials char
let encodeImg = base64String.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) as String!
【讨论】:
即使我用过这种方法,看起来还不错。 @Nekfeu 您能否建议您的 API 如何解码发送的图像。提前致谢。 API 对收到的字符串进行 base64 解码。缓冲结果放在 JPG 上并存储在 AWS 中 我目前正在寻找实现相同目标的不同方法。你们有没有人尝试比较这些方法的速度和效率:(1)。从 UIImagePickerController 获取 UIImage 并转换为 NSData,然后上传 NSData (2)从 UIImagePickerController 获取 UIImage,然后转换为 PHAsset。然后获取NSData并上传(3)从UIImagePickerController获取UIImage并直接上传以上是关于将图像文件从 IOS 上传到 Web 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Objective C - NodeJS - 如何将特定文件(不是图像)从 iOS 应用程序上传到服务器?
如何使用 ios 应用程序将图像上传到 Node.JS 服务器