2017-10-10 71 views
0

這就是我試圖使用Alamofire上傳圖片的方式。但程序崩潰說像... 'NSInvalidArgumentException', reason: '-[_SwiftTypePreservingNSNumber dataUsingEncoding:]: unrecognized selector sent to instance...我不能圖確切reason.This就是我正在做的請求......使用Alamofire上傳圖片的問題(以圖片作爲參數)

for i in 1...(imageArray.count) { 
     for img in imageArray { 

      let url = "http://myapp.com/a/images_upload" 
      let headers = [ "Content-Type":"application/x-www-form-urlencoded"] 

    let imageData: Data = (UIImageJPEGRepresentation(img, 0.6) as Data?)! 
      print(imageData) 

      let parameters: [String: Any] = [ 
        "access_token": commonVarForAccessToken, 
        "seller_id": idForNewOldUser, 
        "product_id": self.productId, 
        "is_default": "1", 
        "sequence": i, 
        "image": imageData ] 

      Alamofire.upload(multipartFormData: { (multipartFormData) in 
       print(parameters) 

       multipartFormData.append(imageData as Data, withName: "home-\(self.index)", fileName: "home-\(self.index)", mimeType: "image/jpeg") 

       for (key, value) in parameters { 
        print(key,value) 

        multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key) 

       } 
      }, to:url) 
      { (result) in 
       switch result { 
       case .success(let upload, _, _): 
        upload.uploadProgress(closure: { (Progress) in 
         //Print progress 
        }) 
        upload.responseJSON { response in 

         print(response.request) // original URL request 

         if let JSON = response.result.value { 
          print("JSON: \(JSON)") 
         } 

        } 
       case .failure(let encodingError): 

        print(encodingError) 
        break 
       }}}} 

希望有人能幫助... ...謝謝.. 。:)

+0

爲什麼使用兩次循環? –

+0

某處有一個(內部/隱藏)調用'dataUsingEncoding:'因爲對象是一個'(NS)Number'而不是'(NS)Data',所以不起作用。我會說這是這樣一行:'multipartFormData.append((值爲AnyObject).data(使用:String.Encoding.utf8.rawValue)!,withName:key)'。你不能在任何類型的'value'上做'((作爲AnyObject的值).data(使用:String.Encoding.utf8.rawValue)',我不知道其他對象的類是什麼,但''序列':我,'應該崩潰它 – Larme

+0

我也試着給序列硬編碼值爲「1」,但它再次崩潰也許它不接受圖像在給定的格式... imageData只是顯示爲'403829字節'...這可能是一個問題,@Larme? –

回答

0

嘗試使用此code.It正在爲我工​​作。

let para: [String: Any] 

Alamofire.upload(multipartFormData: {(multipartFormData) in 

for i in 0..<uploadImages.count{   multipartFormData.append(UIImageJPEGRepresentation(uploadImages[i], 0.3)!, withName: "image\(i)", fileName: "swift_file\(i).jpeg", mimeType: "image/jpg")    
     } 

     for (key, value) in para { 
      multipartFormData.append((value).data(using: String.Encoding.utf8)!, withName: key) 
     } 
    }, to: apiURL) 
    { (result) in 
     switch result { 
     case .success(let upload, _,_): 

      upload.uploadProgress(closure: { (progress) in 
       UILabel().text = "\((progress.fractionCompleted * 100)) %" 
       print (progress.fractionCompleted * 100) 
      }) 


      upload.responseJSON { response in 

       guard ((response.result.value) != nil) else{ 
      print(response.result.error!.localizedDescription) 
        return 
       }