2016-08-15 68 views
1

我正嘗試使用Alamofire將圖像與其他後期參數一起上傳。Swift Alamofire將圖像陣列與其他參數一起發送

望着DOC我看到:

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) 
     } 
    } 
) 

但我怎麼能上傳圖片的像一個數組:

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

與其他後數據一起:

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 
    } 

} 

這是我做到的。希望這可以幫助。它的AlamoFire,它是一個POST請求,我猜只是一種不同的語法。只需一個for循環,爲數組中的每個圖像創建一個API調用。

編輯:

因此,而不是使用for循環和調用API五個單獨的時間,簡單地改變AFMultipartofrmdata的名稱。當您訪問這些文件時,請在您的API中傳入5個文件,然後按名稱訪問它們。例如,我的API抓住文件的方式,這是在Python,像這樣

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

現在的數據是我的形象,我可以把它上傳如此。 只需在同一個API調用中執行這五個不同的時間。

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

我剛更新了答案 –

相關問題