我需要一次上传几个图片到一个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...
}
我又试了几次,都没有成功。我怎么能解决这个问题?
另外,这里是我的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/*")
}
}
}