2017-08-19 23 views
1

一度に複数の画像を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)") 
         } 
     }) 
    } 

答えて

0

使用マルチパートフォームデータは、複数のビデオに

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/*") 
          } 
         } 
        } 
+0

ありがとうございます。私はこれが私の問題だとは思わない。画像をアップロードするためのコードを追加しました。それは動作しますが、ループで使用すると、ループ内の最後の画像だけが実際にアップロードされます。 –

0

をアップロードするためのコードスニペットで私は良いことないです機能がありますあなたの辞書に新しいキーを追加しているのですか?したがって、1つのキーしかないので、1つの値しか存在しません。したがって、forループは1回だけ実行されます。

関連する問題