一度に複数の画像をAPIにアップロードする必要があります。私はAlamofireを使用して画像をアップロードしています.APIではリクエストごとに1つの画像しかアップロードできません。Alamofire Swift 3でアップロードされた最後の画像のみ
アップロードする画像の配列がありますが、そのたびに配列を調べてリクエストしています。各画像は正しく表示されているように見えますが、データベースをチェックすると最後の画像のみがアップロードされています。各呼び出しはステータスコード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")
そして、私はより多くのいくつかのことを試してみたループ
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)")
}
})
}
ありがとうございます。私はこれが私の問題だとは思わない。画像をアップロードするためのコードを追加しました。それは動作しますが、ループで使用すると、ループ内の最後の画像だけが実際にアップロードされます。 –