Загрузка изображения в Alamofire - PullRequest
0 голосов
/ 27 августа 2018

это моя первая попытка при загрузке одного изображения через Alamofire на сервер. Я искал это и получил один способ сделать это. Вот как я передаю изображение из моего изображения в параметр моего API.

 // import Alamofire
func uploadWithAlamofire() {

    let token = UserDefaults.standard.string(forKey: "token")
    let image = UIImage(cgImage: profileImage.image as! CGImage)
    let imageData = UIImagePNGRepresentation(image)
    // define parameters
    let parameters = [
        "token" : token!,
        "name" : nameTxt.text!,
        "about" : descriptionTxt.text!,
        "picture" : imageData as Any
    ] as [String : Any]

    Alamofire.upload(multipartFormData: { multipartFormData in
        if let imageData = UIImageJPEGRepresentation(image, 1) {
            multipartFormData.append(imageData, withName: "file", fileName: "file.png", mimeType: "image/png")
        }

        for (key, value) in parameters {
            multipartFormData.append(((value as AnyObject).data(using: .utf8))!, withName: key)
        }}, to: "upload_url", method: .post, headers: ["Authorization": "auth_token"],
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.response { [weak self] response in
                        guard let strongSelf = self else {
                            return
                        }
                        debugPrint(response)
                    }
                case .failure(let encodingError):
                    print("error:\(encodingError)")
                }
    })
}

Я получаю сообщение об ошибке в этой строке кода, multipartFormData.append(((value as AnyObject).data(using: .utf8))!, withName: key) Ошибка, которую показывает компилятор, состоит в следующем: `` Тип 'UInt' не имеет члена 'utf8'`. Как я могу решить это? и это правильный способ отправки изображения?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я использую эту функцию и она работает нормально. Попробуйте.

func postImageToDB(image : UIImage) {
                           **//enter your url here** 
    let imagePostUrlStr =  "https://myWebsiteName.com/upload_image.php/"

    guard let imageData = UIImagePNGRepresentation(image) else {
      return
    }
    //want to save my image to this directory which is inside root
    **//your params may be different.**
    let params = ["path" : "Brainplow/001243192018125835"]

    Alamofire.upload(multipartFormData: { (multiPartFormData: MultipartFormData) in
      //append path parameter
      for (key, value) in params {
        multiPartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
      }
      multiPartFormData.append(imageData, withName: "fileToUpload", fileName: "testfilename.png", mimeType: "image/png")

    }, to: imagePostUrlStr) { (result: SessionManager.MultipartFormDataEncodingResult) in
      switch result {
      case .success(request: let uploadRequest, _, _ ):


        uploadRequest.uploadProgress(closure: { (progress) in

          print("Upload Progress: \(progress.fractionCompleted)")

        })

        uploadRequest.responseString { response in
          print("printing response string")
          print(response.value as Any)
          print(response)
          print(response.result)

        }

      case .failure(let error):
        print(error.localizedDescription)
      }
    }


  }
0 голосов
/ 28 августа 2018

Попробуйте удалить изображение из параметров и добавить его только в несколько частей

  • "picture": imageData as Any (убрать это)
  • multipartFormData.append (imageData, withName: "file", fileName: "file.png", mimeType: "image / png") (переименуйте здесь свой параметр изображения и вставьте изображение)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...