问题描述
通过使用多部分urlsession尝试更新地址以及图像,图像已更新,但地址未更新。 / * let postDict:[String:String] = [“名称”:txtName.text !,“地址”:txtAddress.text!,“ countryPrefix”:“ +91”,“ phone”:txtPhone.text!]
webSeviceCallUpdateProfile(parameter: postDict,paramName: "image",fileName: strImageName,image: imgViewProfile.image!)
*/
func webSeviceCallUpdateProfile(参数:[String:String],paramName:字符串,fileName:字符串,图像:UIImage){
let url = URL(string: "http://www.example.com")
// generate boundary string using a unique per-app string
let boundary = UUID().uuidString
let session = URLSession.shared
// Set the URLRequest to POST and to the specified URL
var urlRequest = URLRequest(url: url!)
urlRequest.httpMethod = "POST"
// let token : String = UserDefaults.standard.string(forKey: "authToken") ?? ""
// Set Content-Type Header to multipart/form-data,this is equivalent to submitting form data with file upload in a web browser
// And the boundary is also set here
urlRequest.setValue("multipart/form-data; boundary=\(boundary)",forHTTPHeaderField: "Content-Type")
if let appVersion = UserDefaults.standard.value(forKey: "appVersion")
{
urlRequest.addValue("\(appVersion)",forHTTPHeaderField: "App-Version")
}
urlRequest.addValue("updateProfile",forHTTPHeaderField: "Api-Name")
if let userId = UserDefaults.standard.value(forKey: "userId")
{
urlRequest.addValue("\(userId)",forHTTPHeaderField: "UserId")
}
if let authToken = UserDefaults.standard.value(forKey: "authToken")
{
urlRequest.addValue("\(authToken)",forHTTPHeaderField: "AuthToken")
}
var formdata = Data()
let body = NSMutableData()
do {
let jsonData = try JSONSerialization.data(withJSONObject: parameter,options: .prettyPrinted)
formdata = jsonData
} catch let error {
print(error.localizedDescription)
}
let lineBreak = "\r\n"
let boundaryPrefix = "--\(boundary)\r\n"
body.appendString(boundaryPrefix)
body.appendString("Content-disposition: form-data; name=\"\(parameter)\"\r\n")
body.appendString("Content-Type: \("application/json;charset=utf-8")\r\n\r\n")
body.append(formdata)
body.appendString("\r\n")
body.appendString("--\(boundary)--\(lineBreak)")
// Add the image data to the raw http request data
formdata.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
formdata.append("Content-disposition: form-data; name=\"\(paramName)\"; filename=\"\(fileName)\"\r\n".data(using: .utf8)!)
formdata.append("Content-Type: image/png\r\n\r\n".data(using: .utf8)!)
formdata.append(image.pngData()!)
formdata.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)
// Send a POST request to the URL,with the data we created earlier
session.uploadTask(with: urlRequest,from: formdata,completionHandler: { responseData,response,error in
if error == nil {
let jsonData = try? JSONSerialization.jsonObject(with: responseData!,options: .allowFragments)
if let json = jsonData as? [String: Any] {
print(json)
if let jsonStatus = json["status"]
{
let status = jsonStatus as! Int
if status == 1
{
if let response = json["response"] as? [String:Any]
{
if response["userId"] != nil
{
if let membership = response["membership"]
{
UserDefaults.standard.set(membership,forKey: "membership")
}
if let name = response["name"]
{
UserDefaults.standard.set(name,forKey: "name")
}
if let image = response["image"] as? String,image.count > 0
{
SDImageCache.shared.clearMemory()
SDImageCache.shared.cleardisk()
print(image)
UserDefaults.standard.set(image,forKey: "profilePicture")
}
}
}
}
}
dispatchQueue.main.async {
let message = json["message"] as! String
self.showAlert(title: "Success",message: message)
}
}
}
}).resume()
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)