【问题标题】:Upload image without converting NSData上传图片而不转换 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,所以答案就是您;不能那样做.. :)

标签: ios


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-23
        相关资源
        最近更新 更多