Загрузка Alamofire 4 с параметрами

#swift3 #alamofire

#swift3 #alamofire

Вопрос:

Я делаю следующее, чтобы загрузить файл PNG с параметрами:

     Alamofire.upload(
        multipartFormData: { multipartFormData in
            multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: "file", fileName: "picture.png", mimeType: "image/png")

            // Send parameters
            multipartFormData.append((UserDefaults.standard.value(forKey: Email) as! String).data(using: .utf8)!, withName: "email")
            multipartFormData.append("png".data(using: .utf8)!, withName: "type")

        },
        to: "user/picture",
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    debugPrint("SUCCESS RESPONSE: (response)")
                }
            case .failure(let encodingError):
                self.removeSpinnerFromView()
                print("ERROR RESPONSE: (encodingError)")

            }
        }
    )
  

Проблема в том, что на моем сервере я не вижу полей email type формы и. Для этого я следовал примерам, размещенным в Интернете. Есть ли что-нибудь, что я должен сделать по-другому для этого?

Редактировать

Если я удалю часть, в которую я поместил:

 multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: "file", fileName: "picture.png", mimeType: "image/png")
  

ЗАТЕМ параметры будут включены. В противном случае нет, я думаю, что это ошибка в Alamofire 4.0.1.

Ответ №1:

На моей стороне все работает нормально.

Я использую следующий код:

 let parameters = [
            "file_name": "swift_file.jpeg"
        ]

Alamofire.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 1)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg")
            for (key, value) in parameters {
                multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
            }
            }, to:"http://sample.com/upload_img.php")
    { (result) in
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (progress) in
                //Print progress
            })

            upload.responseJSON { response in
                //print response.result
            }

        case .failure(let encodingError):
               //print encodingError.description
        }
    }
  

Комментарии:

1. для (ключ, значение) в параметрах является ли тип значения ‘AnyObject’?

2. @MicroR На моей стороне все работает нормально. Это может быть проблема с серверной частью.

3. @EktaPadaliya. Можете ли вы указать, как загрузить изображение с помощью swift 3 alamofire 4. Я сделал для swift 2.3, но не смог достичь с помощью swift 3. Пожалуйста, направьте меня.

4. @EktaPadaliya. Нет, но мне также нужно включить заголовки, как я могу добавить

5. @UmaMadhavi вы должны добавить «импортировать Alamofire».

Ответ №2:

Если ваше значение имеет тип Any, вы можете изменить его следующим образом

 for (key, value) in params {
    let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value)
    formData.append(paramsData, withName: key)
}