gpt4 book ai didi

ios - 在swift 3中使用JSON参数上传图像

转载 作者:行者123 更新时间:2023-11-30 12:09:36 25 4
gpt4 key购买 nike

我只是想在 NSURLSession swift 3 中使用 json 参数上传图像

网址:“http:xxxxxxxx”JSON 参数:{"data":{"userId":9}}

请帮助我完成它

这是代码:

func UploadRequest()
{
let username = "v"
let password = "v"
let loginData = String(format: "%@:%@", username, password).data(using: String.Encoding.utf8)!
let base64LoginData = loginData.base64EncodedString()

let url = NSURL(string: "http://xxxxxxxxxxxx")
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
request.setValue("Basic \(base64LoginData)", forHTTPHeaderField: "Authorization")
request.setValue("Application/json", forHTTPHeaderField: "Content-Type")


if (imageView.image == nil)
{
return
}

let image_data = UIImageJPEGRepresentation(imageView.image!, 1)


if(image_data == nil)
{
return
}

let boundary = generateBoundaryString()

request.httpBody = createBodyWithParameters(filePathKey: "file", imageDataKey: image_data! as NSData, boundary: boundary) as Data
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")


let session = URLSession.shared

let task = session.dataTask(with: request as URLRequest){

data, response, error in

self.loading.stopAnimating()

if data == nil{
print("data is nil")
}
else
{
print("data is\(data!)")
}

if error == nil{
print("error is nil")
}
else
{
print("error is \(error!)")
}

if response == nil{
print("response is nil")
}
else
{
print("response is \(response!)")
}

print("hitted")

guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else {
print("error")
return
}

let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print(dataString!)

}
self.loading.stopAnimating()

task.resume()

}

func jsonToNSData(json: AnyObject) -> NSData?{
return try? JSONSerialization.data(withJSONObject: json, options: []) as NSData
}

func generateBoundaryString() -> String
{
return "Boundary-\(NSUUID().uuidString)"
}
//[String:[String: Int]]?

func createBodyWithParameters(filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
let body = NSMutableData();

let param:[String:Any] = ["data":["data":["userId":9]]]


do {


for i in param {

body.appendString(string:"--\(boundary)\r\n")
body.appendString(string:"Content-Disposition: form-data; name=\"\(i.key)\"\r\n\r\n")
body.appendString(string:"\(i.value)\r\n")

}

let jsonData = try JSONSerialization.data(withJSONObject: param, options: .prettyPrinted)
let decoded = try JSONSerialization.jsonObject(with: jsonData as Data, options: [])

let filename = "user-profile.jpg"
let mimetype = "image/jpg"

body.appendString(string:"--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(decoded)\"\r\n\r\n")
body.appendString(string:"\(decoded)\r\n")

body.appendString(string: "--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")
body.append(imageDataKey as Data)
body.appendString(string: "\r\n")

body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)

return body
}


extension NSMutableData {

func appendString(string: String) {
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
append(data!)
}
}

在后端目标中出现错误,因为 ["userId":9] 无法反序列化它

最佳答案

该错误看起来可能与序列化、反序列化然后将字典转换为字符串然后再次转换回数据的方式有关。您可以在创建请求负载时使用已解码的属性而不是 jsonData 来看到这一点。

而不是body.appendString(string:"\(decoded)\r\n")

为什么不尝试:
body.append(jsonData)
body.appendString(字符串:"\r\n")

关于ios - 在swift 3中使用JSON参数上传图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46241547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com