2017-02-08 9 views
0

Я использую эту функцию для загрузки нескольких изображений с параметрами в методе post в Alamofire. Мое изображение не загружается. Я перекрестно проверял, что на сервере нет изображения, а другие данные успешно сохранены в БД. Я использовал этот метод в Alamofire 3.0 и теперь обновляюсь до 4.0. Другие функции post и get работают отлично для меня.Загрузка изображения с параметрами в MultiPartFormData не работает в 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, но я использую alamofire для API, и я решил эту проблему также. – ChanWarde

+0

@ChanWarde вы можете рассказать, как вы решили эту проблему? – ishhhh

 Смежные вопросы

  • Нет связанных вопросов^_^