将 UIImage 发送到仅接受 JSON 的 Web 服务(通过 RestKit)
Posted
技术标签:
【中文标题】将 UIImage 发送到仅接受 JSON 的 Web 服务(通过 RestKit)【英文标题】:Sending an UIImage to a web service that only accepts JSON (via RestKit) 【发布时间】:2012-04-26 15:39:47 【问题描述】:我无法将 UIImage 对象发送到我的 REST Web 服务 只接受 JSON 作为输入。 我已经设置好我的对象映射,它可以生成 JSON 很好,直到它到达任何 UIImages。
我阅读了有关单独加载图像的页面: https://github.com/RestKit/RestKit/wiki/Attach-a-File-to-an-RKObjectLoader 但这总是将内容类型从 application/json 更改为 application/xxx-form-url-encoded(或任何它)。
那么在不使用 RKParams 的情况下,最好的方法是什么?
我在这里找到了另一个链接:https://groups.google.com/forum/#!msg/restkit/QcTPucXXn4o/41IcKDCeoGAJ,它谈到了早期版本的 您可以在其中使用 propertiesForSerialization 的 RestKit RKObjectMappable 协议,但该协议和方法似乎不再 在 0.10.0 中可用。
新版本中是否有某种方式可以让您替换 带有 base64 编码数据的 UIImage 的内容(因此 JSON 安全)在尝试序列化之前?
或者还有其他解决方案吗?任何帮助表示赞赏。谢谢
【问题讨论】:
【参考方案1】:我已经使用 RestKit 完成了这项工作,方法是保存到“imageData”属性并将图像编码为 base64。
不过,这对 CoreData 来说不是很好,所以我编写了它,以便在从服务器获取图像(以 base64 编码)时,它将图像保存到磁盘,然后将路径存储在 Core Data 中。然后在将图像推送到服务器时,它会在磁盘上找到文件,编码为 base64,然后将其包含在 JSON 中。
这不是一个完美的方法,但如果你不经常来回发送图像,它会很好。
【讨论】:
好主意。那么如何在磁盘上找到文件并编码为 base64 呢?这一切都是在您调用“postObject”之前完成的,而 postObject 只知道使用 imageData 字段? 我将willSave
方法添加到 managedObject 中。基本上我的对象上有一个imagePath
属性。 RestKit 将编码后的图像数据映射到 imagePath,但随后在willSave
中,我截取了数据,将其保存到磁盘,然后将图像的路径而不是图像数据本身存储在imagePath
中。这有帮助吗?【参考方案2】:
您是否尝试过使用 RKParams 并只是更改您的 serializationMIMEType?
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL];;
objectManager.serializationMIMEType = RKMIMETypeJSON;
【讨论】:
是的。 RKParams 似乎用 multipart/form 编码覆盖了任何对象管理器设置。这很烦人。【参考方案3】:嗯,我想出了一种方法来做到这一点。
我最终为每个 UIImage 创建了一个额外的 NSString 属性,这就是我用来映射的,而不是实际的 UIImage。然后在 postObject 之前,我为每个图像生成 base64 代码并相应地填充 NSString 属性。
不是最好的方法,但仍然很想看看其他人的想法。
【讨论】:
以上是关于将 UIImage 发送到仅接受 JSON 的 Web 服务(通过 RestKit)的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIImage 转换为 .JPEG 格式并将其发送到服务器?
我希望将 yahoo Finance api 过滤到仅出价在 0 美元到 10 美元之间的股票
在swift中从UIImage / CGImage获取像素数据作为数组
为啥 SwiftUI 的 Kingfisher KFImage.Placeholder(UIImage(named: "logo")) 不接受 UIImage 为可接受的?