上传图片而不转换 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的主要内容,如果未能解决你的问题,请参考以下文章