发送核心数据对象以发布API Alamofire multipartFormData

时间:2019-02-21 19:53:34

标签: swift core-data alamofire multipartform-data

我的应用程序上有一个屏幕,我得到一些字段并保存在对象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并将其转换为Data类型: (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文件转换为数据类型,这样我就可以通过multipartFormData.append发送了吗?

我尝试过:herehere

1 个答案:

答案 0 :(得分: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")
相关问题