2017-02-08 8 views
0

Alamofireのpostメソッドのパラメータを使用して複数の画像をアップロードする場合にこの機能を使用しています。私のイメージはアップロードされていません。私は、サーバー上にイメージのエントリがないが、他のデータが正常にDBに格納されていることを確認しました。 Alamofire 3.0でこの方法を使用していましたが、4.0にアップデートしました。他のpostとget関数は私にとってうまくいっています。MultiPartFormDataのparamteresを使用した画像アップロードがAlamofire 4.0で機能していません

static func callUploadApi (_ url: String , parameter:[String: String] , images: [URL] , imageParameterName:String ,showHud:Bool , handler: @escaping (_ result : NSMutableDictionary) -> Void) 
    { 
     Alamofire.upload(multipartFormData: { multipartFormData in 

      for (key, value) in parameter // Add Paramters 
      { 
       multipartFormData.append(value.data(using: .utf8)! , withName: key) 
      } 
      for imageUrl in images // Add Images 
      { 
       multipartFormData.append(imageUrl, withName: imageParameterName) 
      } 
     }, to: "\(baseUrl)\(url)", method: .post, 
       encodingCompletion: { encodingResult in 
        switch encodingResult { 
        case .success(let upload, _, _): 
         print(upload.progress) 

         upload.responseJSON { response in 

          if let JSON = response.result.value 
          { 
           print("***********************************************") 
           print("JSON: \(JSON)") 
           print("***********************************************")         
           handler(JSON as! NSMutableDictionary) 
          } 
         } 
         break 
        case .failure(let encodingError): 
         print("error:\(encodingError)") 
        } 
     }) 
} 
+0

ヒント:カールを印刷し、それをターミナルで使用すると、実際にコードが何をしているのかがわかります。 –

+0

私は郵便配達員とそれが正常に動作していることを確認しました。私はコードを介して画像をアップロードしようとするとアップロードしません。どのように問題があるのか​​を知るには? – ChanWarde

+0

ATSに問題がありますか? –

答えて

0

これは私が私の必要性のためにこれを書き、私のために働きました。誰もが必要に応じてそれを変更することができます。

static func upload(_ url : String , 
          parameter : [String : String] = [:], 
          arrayImage : [String : UIImage], 
          shouldShowHud : Bool = true, 
          completionHandler : @escaping (_ result : NSDictionary , _ status : Bool) -> Void) 
     { 
      Alamofire.upload(multipartFormData: { multipartFormData in 
       for (key, value) in parameter{ 
        multipartFormData.append(value.data(using: .utf8)! , withName: key) 
       } 

       for (key, value) in arrayImage { 
        if let imageData = UIImageJPEGRepresentation(imageUrl, 0.5) { 
         multipartFormData.append(imageData , withName: key, fileName: "file.jpeg", mimeType: "image/jpeg") 
        } 
       } 
      }, to: MainUrl+url , method: .post, headers : Header, encodingCompletion: { encodingResult in 

       switch encodingResult{ 
       case .success(let upload, _, _): 
        print("Upload Progress \(upload.uploadProgress.completedUnitCount) '\' \(upload.uploadProgress.totalUnitCount)") 

        upload.responseJSON { response in 
         if let JSON = response.result.value { 
          let status = (JSON as! NSDictionary)["status"] as? Bool 
          completionHandler(JSON as! NSDictionary , status!) 
         } else { 
          let result : NSDictionary = ["message" : "Request Time out, please refresh again." as Any] 
          completionHandler(result as NSDictionary , false) 
         } 
        } 
        break 
       case .failure: 
        let result : NSDictionary = ["message" : "Request Time out, please refresh again." ] 
        completionHandler(result as NSDictionary , false) 
        break 
       } 
      } 
      ) 
     } 
0
func urlRequestWithComponents(urlString:String, parameters:Dictionary<String, String>, imageData:NSData) -> (URLRequestConvertible, NSData) { 

    let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!) 
    mutableURLRequest.HTTPMethod = Alamofire.Method.POST.rawValue 
    let boundaryConstant = "------------0x0x0x0x0x0x0x0x"; 
    let contentType = NSString(format: "multipart/form-data;boundary=%@",boundaryConstant) 
    mutableURLRequest.setValue(contentType as String, forHTTPHeaderField: "Content-Type") 
    let uploadData = NSMutableData() 
    uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    uploadData.appendData(NSString(format: "Content-Disposition: form-data; name=\"file\";filename=\"%@\"\r\n", self.imageURL).dataUsingEncoding(NSUTF8StringEncoding)!) 
    uploadData.appendData("Content-Type: application/octet-stream\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    uploadData.appendData(imageData) 

    for (key, value) in parameters { 
     uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
     uploadData.appendData("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".dataUsingEncoding(NSUTF8StringEncoding)!) 
    } 
    uploadData.appendData("\r\n--\(boundaryConstant)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 

    return (Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0, uploadData) 
} 
+0

。 –

+0

Prabhatに感謝しますが、APIとしてalamofireを使用していますが、この問題も解決しました。 – ChanWarde

+0

@ChanWardeあなたはこの問題をどのように解決したか教えていただけますか? – ishhhh

関連する問題