作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是想在 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/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!