上传图片而不转换 NSData

Posted

技术标签:

【中文标题】上传图片而不转换 NSData【英文标题】:Upload image without converting NSData 【发布时间】:2015-12-01 04:56:11 【问题描述】:

我尝试将我的图像上传到服务器并转换为 NSData,但转换图像需要很长时间。

我们可以在不转换为 NSData 的情况下将图像上传到服务器吗?

【问题讨论】:

不,您只能使用直接 FTP 连接。一个很好的例子是github.com/lloydsargent/BlackRaccoon 感谢@JanakLN,但是当我一次上传更多图像(10 张图像)时,需要花费很多时间,而且 iPhone 设备中还会出现一些内存警告。所以我想尽可能避免处理(图像到 NSData 转换)。 使用base64转换 @JanakLN,即使您将其转换为base64,您仍然需要NSMutableURLRequest/NSURLRequest 向服务器发送请求,而-setHTTPBody 需要NSData,所以答案就是您;不能那样做.. :) 【参考方案1】:

一开始我曾尝试将图像直接发送到服务器。 但是如果我尝试发送它而不将图像转换为数据和字符串,它就无法发送它也是不可能的。因为在服务器中如果我们向服务器发送任何数据,它必须是字符串格式。如果我们直接发送图像,它占用太多空间也不应该是数据。图像必须是服务器中的 URL 或路径。

【讨论】:

【参考方案2】:

这取决于这些图像的来源。例如,如果图像来自照片库,那么,是的,您可以检索原始资产,避免将UIImage 转换为NSData 的低效过程(这会使资产变大,引入质量损失,丢失元数据等)。

在这种情况下,关键的关键信息不是“如何避免转换为NSData”,而是“如何避免通过UIImage 来回转换图像,然后将其重新转换回NSData ,而只是检索原始资产。”

但这仅适用于您拥有原始原始资源的图像(例如照片库中的图像、文档文件夹中的图像等)。在这些情况下,只需获取原始的 NSData 即可。

但如果这是您以编程方式生成的图像(例如 UIKit 视图的快照),则必须将其转换为 NSData。但是,如果您一开始就可以避免通过UIImage 来回往返,那么您就可以消除这种开销。

【讨论】:

【参考方案3】:

您可以使用 blob 数据类型存储数据。虽然不是很推荐。您可以参考这些链接。 BLOB data type 和 how to use BLOB storage service 不要将大型 BLOB 放入数据库中。将它们放在数据库文件旁边的文件系统中,然后将文件名或 URL 写入数据库。这将更快,更有效地使用数据库,最小化 I/O。

【讨论】:

以上是关于上传图片而不转换 NSData的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 上传图像

图片上传代码

Golang实战项目-B2C电商平台项目

AFNetworking 上传图片错误

如何让用户上传多张图片而不预先定义HTML上传输入框的数量?

上传图片的实现