2017-01-11 12 views
1

Я перешел в swift 3, для которого я должен обновить Alamofire до 4, Загрузить изображение с запросом mulitpart работает отлично в swift 2 и том же API с теми же параметрами, что и внутренний сервер ошибка 500 в успехе здесь являются скор 2,3 код, который работает отличноЗагрузить Multipart swift Загрузка изображения с внутреннего сервера 500 в ответ

 Alamofire.upload(
     .POST, 
     AppConstants.kAPIBaseURL + AppConstants.KAPIWidgetUrl + AppConstants.KAPIUpdateUserPhoto,headers: headers, 
     multipartFormData: { multipartFormData in 
      multipartFormData.appendBodyPart(data: imageData!, name: "image[image]", fileName: "myImage.png", mimeType: "image/png") 
      multipartFormData.appendBodyPart(data: "\((UserManager._currentUser?.userID)!)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"id") 
      multipartFormData.appendBodyPart(data: "profile_picture".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"upload_to") 


     }, 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .Success(let upload, _, _): 

       upload.responseJSON { (JSON) in 
        let abc = JSON.result.value as! NSDictionary 
        print(abc) 
        let arrayOfResult = abc["results"] as! NSDictionary 
        let responseMessage = abc["message"] as! String 
        let currentUser: MOUser? 
        currentUser = MOUser.init(object: arrayOfResult) 
        UserManager.setCurrentUser(currentUser) 
        dispatch_async(dispatch_get_main_queue(),{ 
         //Show Alert in UI 
         print("image uploaded"); 
         [self.showAlertViewWithTitle(AppConstants.kEmptyString, message: "\(responseMessage)", dismissCompletion: { 

         })] 
        }) 
       } 

      case .Failure(let encodingError): 
       print(encodingError); 
      } 
     } 
    ); 

и ниже код Swift 3 с ошибкой

Alamofire.upload(
     multipartFormData: { multipartFormData in 

      multipartFormData.append(imageData!, withName: "image[image]", fileName: "myImage.png", mimeType: "image/png") 
      multipartFormData.append("\(UserManager._currentUser?.userID)".data(using: .utf8, allowLossyConversion: false)!, withName: "id") 
      multipartFormData.append("profile_picture".data(using: .utf8, allowLossyConversion: false)!, withName: "upload_to") 


    }, 
     to: AppConstants.kAPIBaseURL + AppConstants.KAPIWidgetUrl + AppConstants.KAPIUpdateUserPhoto ,method: .post, headers: headers, 
     encodingCompletion: { encodingResult in 
      print(encodingResult) 
      switch encodingResult { 

      case .success(let upload, _, _): 
       upload.responseJSON { response in 

        print("SUCCESS RESPONSE: \(response)") 
        SVProgressHUD.dismiss() 
        if let info = response as? Dictionary<String, AnyObject> { 

         if let links = info["links"] as! Dictionary<String, AnyObject>? { 
          if let imgLink = links["image_link"] as? String { 

           print("LINK: \(imgLink)") 

          } 
         } 

        } 

       } 

       upload.uploadProgress { progress in 

        print(progress.fractionCompleted) 
       } 

       upload.responseString(completionHandler: { (response) in 
        print(response) 
        print(response.data) 
        print(response.debugDescription) 
        print(response.description) 
        print(response.result.description) 
        print(response.response) 
       }) 



      case .failure(let encodingError): 
       SVProgressHUD.dismiss() 
       print("ERROR RESPONSE: \(encodingError)") 

      }//switch 

    } 
    ); 

ошибка сервера это

SUCCESS: {"status":"500","error":"Internal Server Error"} 
SUCCESS 
Optional(<NSHTTPURLResponse: 0x60000123cda0> { URL: https://../api///imageupload } { status code: 500, headers { 
Connection = "keep-alive"; 
"Content-Length" = 48; 
"Content-Type" = "application/json; charset=utf-8"; 
Date = "Wed, 11 Jan 2017 13:45:59 GMT"; 
Server = "WEBrick/1.3.1 (Ruby/2.0.0/2015-12-16)"; 
Via = "1.1 vegur"; 
"X-Rack-Cache" = "invalidate, pass"; 
"X-Request-Id" = "78cc7e5c-9bc1-4802-beac-15f8f7c4400a"; 
"X-Runtime" = "0.167883"; 

Если кто-нибудь может мне помочь в этом. Благодаря!

+0

Вы писали, что на стороне сервера имеется ошибка 500, но код сервера вообще отсутствует, а также причина ошибки сервера. По крайней мере, причина ошибки сервера может помочь понять проблему. – Xvolks

+0

Я не уверен, если он на стороне сервера, потому что тот же код в swift 2.3 работает нормально, а на swift3.0 у меня такая ошибка: «УСПЕХ: {« status »:« 500 »,« error »:« Internal Server Error » } – Shuja

+0

Вы написали 'получение ошибки внутреннего сервера 500' ... – Xvolks

ответ

1

Существует разница в этой строке:

multipartFormData.append("\(UserManager._currentUser?.userID)".data(using: .utf8, allowLossyConversion: false)!, withName: "id")`. 

Вы не заставляйте разворачивать UserManager._currentUser?.userID, как вы делаете в версии 2.3:

multipartFormData.appendBodyPart(data: "\((UserManager._currentUser?.userID)!)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"id") 

Так что ваша строка для этого «идентификатор» поле, вероятно, что-то вроде «Необязательный (« userID »)», а не только идентификатор пользователя, который вы ожидаете.

+0

Большое спасибо. Именно в этом была проблема – Shuja

+0

Прохладный. Можете ли вы отметить это как принятый ответ? –