我需要一次将多张图片上传到 API。我正在使用 Alamofire 上传图片,API 只允许每个请求上传一张图片。
我有一个要上传的图像数组,我要遍历该数组并每次都发出请求。每张图片似乎都已正确上传,但当我检查数据库时,只有最后一张图片已上传。每个调用都会打印状态代码为 200 的响应,并在完成时打印“SUCCESSFUL”,但实际上只有数组中的最后一个才会上传。
for (index, image) in self.imageArray.enumerated() {
self.uploadImages(photoIndex: index, photo: image.image, fileName: image.imageName, completion: { (true) in
print("SUCCESSFUL")
})
}
我也尝试过使用 DispatchQueue,但这也不起作用:
let serialQueue = DispatchQueue(label: "serialQueue")
在for循环中
serialQueue.async {
//self.uploadImages...
}
我又尝试了一些东西,但没有成功。我该如何解决这个问题?
此外,这是我的上传图片功能
func uploadImages(photoIndex: Int, photo: UIImage, fileName: String, completion: @escaping (_ Success : Bool?) -> ())
{
var success: Bool? = nil
let url : String? = //url
// define parameters
let parameters = [
"photoIndex": "\(photoIndex)"]
Alamofire.upload(multipartFormData: { multipartFormData in
if let imageData = UIImageJPEGRepresentation(photo, 1)
{
multipartFormData.append(imageData, withName: "photo", fileName: fileName, mimeType: "image/png")
}
for (key, value) in parameters {
multipartFormData.append((value.data(using: .utf8))!, withName: key)
}}, to: url!, method: .post,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.response { [weak self] response in
guard let strongSelf = self else {
return
}
success = true
debugPrint(response)
completion(success)
}
case .failure(let encodingError):
print("error:\(encodingError)")
}
})
}
最佳答案
使用多部分表单数据上传任意媒体文件下面是上传多个视频的代码片段
for (key , value) in arrMediaUpload {
if let image = value as? UIImage {
if let imageData = UIImageJPEGRepresentation(image,0.9) {
print("key => \(key)")
multipartFormData.append(imageData as Data, withName: key, fileName: "\(NSDate().timeIntervalSince1970).jpg", mimeType: "image/*")
}
}
}
关于swift - Alamofire Swift 3 仅上传数组中的最后一张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45767300/