2016-08-15 7 views
1

Alamofireを使用して他のポストパラメータと一緒に画像をアップロードしようとしています。Swift Alamofireは他のパラメータと共に画像の配列を送信します

Alamofire.upload(
    .POST, 
    "https://httpbin.org/post", 
    multipartFormData: { multipartFormData in 
     multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn") 
     multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow") 
    }, 
    encodingCompletion: { encodingResult in 
     switch encodingResult { 
     case .Success(let upload, _, _): 
      upload.responseJSON { response in 
       debugPrint(response) 
      } 
     case .Failure(let encodingError): 
      print(encodingError) 
     } 
    } 
) 

しかし、どのように、私は次のように画像の配列をアップロードすることができます:

let parameters: [String: AnyObject] = [ 
      "id": id, 
      "title": title, 
      "desc": description, 
      "images[]": arrayOfImages 
     ] 

答えて

2
func uploadProfileGIF(imageArray: NSMutableArray){ 
    var count = 0 
    let bucketname = DAO.getBucketNameForLoggedInUser() 
    let uploadUrl = "https://whatever.com/whatever" 
    for i in imageArray{ 
     var objectname = "picture" + String(count) 
     let image = i; 
     //Turn image into data 
     let imageData: NSData = UIImagePNGRepresentation(image as! UIImage)! 
     let params = ["objectname" : objectname, "bucketname" : bucketname!, "isGifImgae" : "True", "content_type" : "image/jpeg"] 

     let manager = AFHTTPSessionManager() 
     manager.POST(uploadUrl, parameters: params, constructingBodyWithBlock: { (AFMultipartFormData) in 

      AFMultipartFormData.appendPartWithFileData(imageData, name: "file", fileName: "image", mimeType: "image/jpeg") 
      }, progress: nil, success: { (s:NSURLSessionDataTask, response) in 
       print(response) 
     }) { (s:NSURLSessionDataTask?, e:NSError?) in 
      print(e) 
     } 
     count+=1 
    } 

} 
:一緒に他のポストデータを

var arrayOfImages: [UIImage] = [some images...] 

私が見るドキュメントを見ると

これが私のやり方です。お役に立てれば。そのAlamoFire、それは私が推測する異なる構文のPOSTリクエストです。あなたの配列内のすべてのイメージに対してAPI呼び出しを行うforループです。

EDIT:

ので、代わりのforループを使用し、API 5つの別々の回を呼び出すには、単にAFMultipartofrmdataの名前を変更します。ファイルにアクセスすると、5つのファイルをAPIに渡し、名前でアクセスします。例えば、私のAPIがPythonであるファイルを、グラブする方法は、そう

data = self.request.get('file') 

のように今のデータは私のイメージです、と私はそのようにアップロードすることができます。 同じAPI呼び出しでこれを5回行うだけです。

AFMultipartFormData.appendPartWithFileData(imageData1, name: "file1", fileName: "image", mimeType: "image/jpeg") 
    AFMultipartFormData.appendPartWithFileData(imageData2, name: "file2", fileName: "image", mimeType: "image/jpeg") 
    AFMultipartFormData.appendPartWithFileData(imageData3, name: "file3", fileName: "image", mimeType: "image/jpeg") 
    AFMultipartFormData.appendPartWithFileData(imageData4, name: "file4", fileName: "image", mimeType: "image/jpeg") 
    AFMultipartFormData.appendPartWithFileData(imageData5, name: "file5", fileName: "image", mimeType: "image/jpeg") 

次に、forループ内に名前とNSDataを割り当てます。

次に、API側ではこれが好きです。

image1 = self.request.get('file1') 
image2 = self.request.get('file2') 
image3 = self.request.get('file3') 
image4 = self.request.get('file4') 
image5 = self.request.get('file5') 

希望します。これは私のAPI呼び出しを変更したもので、すべてのユーザーに対して5つの異なる時間を呼び出すのではなく、

+0

共有いただきありがとうございますが、私は同じAPIコールですべての画像を送信する必要があります:/ – user2636197

+0

私はちょうど答えを更新しました –

関連する問題