Ios 如何在不使用Alamofire的情况下,在swift 4中以相同的密钥名上传阵列中的多个图像
签出单个图像上载的代码,但无法在同一密钥下上载阵列中的多个图像 在下面的代码中, 当我向服务器发送一个图像时,它工作得非常好。 ->我想在不使用alamofire或其他第三方库的情况下找到阵列中多个图像的答案Ios 如何在不使用Alamofire的情况下,在swift 4中以相同的密钥名上传阵列中的多个图像,ios,swift,swift4,Ios,Swift,Swift4,签出单个图像上载的代码,但无法在同一密钥下上载阵列中的多个图像 在下面的代码中, 当我向服务器发送一个图像时,它工作得非常好。 ->我想在不使用alamofire或其他第三方库的情况下找到阵列中多个图像的答案 func imageUploadRequest(IMAGE_ARRAY: [UIImage] , uploadUrl: NSURL) { myloader.showLoader(controller: self) let param = ["tit
func imageUploadRequest(IMAGE_ARRAY: [UIImage] , uploadUrl: NSURL) {
myloader.showLoader(controller: self)
let param = ["title":"ds","category_id":"5","description":"gdfjghjdsfgksd","user_id":"66","color":"red"]
let request = NSMutableURLRequest(url:uploadUrl as URL)
request.httpMethod = "POST"
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
//let imageData = UIImageJPEGRepresentation(imageView.imageOrientation, 0.1)
for item in IMAGE_ARRAY
{
let imageData = item.jpegData(compressionQuality: 0.01)
if(imageData==nil) { return; }
request.httpBody = createBodyWithParameters(parameters: param as [String : Any], filePathKey: "files[]", cv : imageData! as NSData, boundary: boundary) as Data
}
// myActivityIndicator.startAnimating();
let task = URLSession.shared.dataTask(with: request as URLRequest,
completionHandler: {
(data, response, error) -> Void in
if let data = data {
DispatchQueue.main.async { // Update UI
self.myloader.removeLoader(controller: self)
let decoder = JSONDecoder()
let obj = try! decoder.decode(GetResponse_Otp.self, from: data)
}
}
})
task.resume()
}
func createBodyWithParameters(parameters: [String: Any]?, filePathKey: String?, cv: NSData, boundary: String) -> NSData {
let body = NSMutableData();
if parameters != nil {
for (key, value) in parameters! {
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString("\(value)\r\n")
}
}
let filename = "\(Date().timeIntervalSince1970).jpeg"
let mimetype = "image/png"
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
body.appendString("Content-Type: \(mimetype)\r\n\r\n")
body.append(cv as Data)
body.appendString("\r\n")
body.appendString("--\(boundary)--\r\n")
return body
}
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().uuidString)"
}
// extension for impage uploading
}
您需要将密钥名称更改为密钥\名称[]在密钥中添加数组[],并确保每次文件名都不同,或者您也可以尝试以下操作:
(Date().timeIntervalSince1970).jpeg
以确保名称每次都不同
func imageUploadRequest(ARRAY_OF_IMAGES: [ANY] , uploadUrl: NSURL) {
myloader.showLoader(controller: self)
let param = ["user_id":fetchString(key: "userId"), "career_level":UnwarppingValue(value: btnCarrer.title(for: .normal)),"education":UnwarppingValue(value: btnEducation.title(for: .normal)),"cur_location":txtFldLocation.text!,"cur_position":txtFldCurrentPosition.text!,"cur_employee":txtFldCurrentEmployee.text!,"experience": UnwarppingValue(value: btnExperience.title(for: .normal)),"industry":UnwarppingValue(value: btnIndustry.title(for: .normal))] as [String : Any]
let request = NSMutableURLRequest(url:uploadUrl as URL)
request.httpMethod = "POST"
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
//let imageData = UIImageJPEGRepresentation(imageView.imageOrientation, 0.1)
for item in IMAGE_ARRAY
{
let imageData = item.jpegData(compressionQuality: 0.01)
if(imageData==nil) { return; }
request.httpBody = createBodyWithParameters(parameters: param as [String : Any], filePathKey: "KEY_NAME[]", cv : imageData! as NSData, boundary: boundary) as Data
}
// myActivityIndicator.startAnimating();
let task = URLSession.shared.dataTask(with: request as URLRequest,
completionHandler: {
(data, response, error) -> Void in
if let data = data {
DispatchQueue.main.async { // Update UI
self.myloader.removeLoader(controller: self)
let decoder = JSONDecoder()
let obj = try! decoder.decode(GetResponse_ProfileOverViewDetails.self, from: data)
guard obj.response?.result == "1" else{
showToast(message: obj.response?.msg ?? "Something Went Wrong", vc: self, normalColor: false)
return
}
if let userPic = obj.response?.data?[0].pic {
saveStringInDefault(value: userPic, key: "userPic")
}else {
saveStringInDefault(value: "", key: "userPic")
}
showToast(message: obj.response?.msg ?? "Something Went Wrong", vc: self, normalColor: false)
}
}
})task.resume()
}
func createBodyWithParameters(parameters: [String: Any]?, filePathKey: String?, cv: NSData, boundary: String) -> NSData {
let body = NSMutableData();
if parameters != nil {
for (key, value) in parameters! {
body.appendString(string: "--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString(string: "\(value)\r\n")
}
}
let filename = HERE->(Date().timeIntervalSince1970).jpeg
let mimetype = "image/png"
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(cv as Data)
body.appendString(string: "\r\n")
body.appendString(string: "--\(boundary)--\r\n")
return body
}
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().uuidString)"
}
// extension for impage uploading
}
选中“我用大写字母编辑代码”。请重试:再次阅读问题,我询问如何在不使用AlamofReach的情况下在swift 4中以相同的键名在数组中上载多个图像根据您的回答,所有图像将设置在不同的键上。我们如何以相同的键发送图像数组没有键将与image_key[]相同,但图像名称每次都不同。如果可能,请您共享一个代码,这将很有帮助,我尝试了,但无法执行。此错误发生兄弟:-2019-11-07 15:13:20.761172+0530 wows[5938:150457]致命错误:“重试!”表达式意外引发错误:Swift.DecodingError.dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的JSON.”,underyingerror:Optional(error Domain=nscocaerordomain Code=3840“结尾垃圾”。.UserInfo={NSDebugDescription=结尾垃圾。})):file/Users/rahulrai/Desktop/wows/Controller/AddProductVC.swift,第212行将此
let filename=“\(Date().timeintervalncesince1970).jpeg”
更改为您的特定图像名称,该名称应不同,并将mimeType更改为mimeType:“image/jpeg”
Brother它清楚地显示了关于json的问题,如果您想要api,我会告诉您发送api链接和参数,我会在此处应用它Brother only on image正在上传到服务器上,告诉我您的应用程序是什么,我会与您分享。api和其他详细信息