【问题标题】:Send Core Data object to post api Alamofire multipartFormData发送核心数据对象发布 api Alamofire multipartFormData
【发布时间】:2019-07-15 20:18:53
【问题描述】:

我的应用程序上有一个屏幕,我可以获取一些字段并保存在我的对象 Order 中。这个对象是我的核心数据对象。保存后,我需要通过 Alamofire POST multipartFormData 将其发送到我的后端。 问题是这是一个核心数据对象(不可编码),我需要在 multipartFormData 上发送数据类型。如何将我的对象转换为数据?还有其他方法吗?

我做了什么:

let order = Order(context: DatabaseController.getContext())
order.orderItem = orderItem
order.product = product
order.value = value
order.date = date

Alamofire 部分:

Alamofire.upload (
            multipartFormData: { multipartFormData in

                multipartFormData.append(order, withName: "order")
            },
            to: url,
            headers: headers,
            encodingCompletion: { encodingResult in

问题是如何将我的对象 Order 放入 multipartFormData 中? 谁能帮帮我?

更新:

好的,发送整个对象不起作用,我的 api 不接受,所以我只用所需的字段制作了一个特定的 json,并将其转换为数据类型: (PS:文件是用户选择的图像数据类型,甚至来自相机或画廊)

var files = Dictionary<Data, String>()
var jsonFiles = [[String: String]]()
var jsonOrder = [String: Any]()

for file in files {
    let dict : [String: String] = [ "orderImageIdLocal": uuidOrderImageIdLocal,
                                    "orderItemAnalysisIdLocal": uuidAnalysisIdLocal,
                                    "urlImageLocal": "\(imageId).jpg"]
    jsonFiles.append(dict)
}
jsonOrder = [ "reason": "\(textViewReason)",
                          "orderImagess": jsonFiles,
                          "orderAnalysisId": "",
                          "orderIdLocal": "\(uuidAnaliseIdLocal)",
                          "orderId": "\(orderId ?? "")",
                          "typeSolicitation": "\(typeSolicitation)"]

然后我将其转换为您所说的数据类型并像上面一样发送到 Alamofire:

let orderData = try? JSONSerialization.data(withJSONObject: jsonOrder, options: .prettyPrinted) {

我现在的问题是我的 api 需要一个包含用户从相机或画廊拍摄的图像的 zip 文件。所以我尝试使用ZIPFoundation。我仍然不知道如何压缩并发送。我应该将每张图片压缩为数据类型吗?然后将 zip 文件转换为 Data 类型,以便我可以通过 multipartFormData.append 发送?

我试过了:herehere

【问题讨论】:

  • 你可以访问服务器上你的api方法的源代码吗?你能把那个贴出来吗?在这种情况下,您的 api 究竟期望什么就很清楚了

标签: swift core-data alamofire multipartform-data


【解决方案1】:

这里的代码是 NSManagedObject 的扩展,它根据属性名称创建字典。

extension NSManagedObject {
  func toData() -> Data? {
    let keys = Array(self.entity.attributesByName.keys)
    let dict = self.dictionaryWithValues(forKeys: keys)
    do {
        let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
        return jsonData
    }
    catch{}
    return nil
  }
}

用法:

let jsonData = order.toData()
multipartFormData.append(jsonData, withName: "order")

【讨论】:

  • 好的,您的解决方案有效。但我的逻辑是错误的。我需要发送一包图像和这个订单对象。我怎样才能做到这一点?当我使用 Alamofire.request 时,我可以将“参数”作为 json 对象发送。但是发送一包图片我应该使用上传,对吗?所以我没有参数。因为我还需要发送一些图像。你能帮忙吗?
  • 你能用细节和你的服务器restapi函数更新你的问题吗,(你期望收到什么)?我会尽力帮助你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2019-10-11
  • 2015-11-04
相关资源
最近更新 更多