Je dois télécharger plusieurs images dans une API à la fois. J'utilise Alamofire pour télécharger des images et l'API ne permet qu'une seule image à télécharger par requête.Seule la dernière image du tableau est téléchargée avec Alamofire Swift 3
J'ai une série d'images à télécharger et je passe par la matrice et fait une demande à chaque fois. Chaque image semble télécharger correctement mais quand je vérifie la base de données seulement la dernière image a été téléchargée. Chaque appel imprime une réponse avec le code d'état 200 et imprime "SUCCESSFUL" quand il est terminé, mais seulement le dernier dans le tableau télécharge réellement.
for (index, image) in self.imageArray.enumerated() {
self.uploadImages(photoIndex: index, photo: image.image, fileName: image.imageName, completion: { (true) in
print("SUCCESSFUL")
})
}
J'ai aussi essayé d'utiliser un DispatchQueue, mais cela ne fonctionne pas non plus:
let serialQueue = DispatchQueue(label: "serialQueue")
Et à l'intérieur de la boucle
serialQueue.async {
//self.uploadImages...
}
J'ai essayé quelques petites choses , sans succès. Comment pourrais-je résoudre ce problème?
Aussi, voici mes uploadImages fonctionnent
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)")
}
})
}
Merci. Je ne pense pas que ce soit mon problème cependant. J'ai ajouté le code pour ma fonction qui télécharge l'image. Cela fonctionne, mais quand je l'utilise dans une boucle, seule la dernière image de la boucle est téléchargée. –