将核心数据对象发送到 post api Alamofire multipartFormData
Send Core Data object to post api Alamofire multipartFormData
我的应用程序上有一个屏幕,我可以获取一些字段并保存在我的对象订单上。这个对象是我的核心数据对象。保存后,我需要通过 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 文件转换为数据类型,以便我可以通过 multipartFormData.append
?
发送
我试过了:here and
这里的代码作为 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 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 文件转换为数据类型,以便我可以通过 multipartFormData.append
?
我试过了:here and
这里的代码作为 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")