Swift 5 - загрузка данных MultipartForm с помощью Alamofire с изображением из галереи - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь загрузить изображение из галереи с несколькими параметрами на сервер, но не могу найти ни одного полезного примера, потому что большинство из них устарели. не знаю с чего начать.

func uploadImageAndData(){

       let periode = periodeField.text
       let kode_wilayah = kodeWilayahField.text
       let nama_petugas = namaPetugasField.text
       let upload_file = myImageView.image

        var parameters = [String:AnyObject]()
        parameters = ["periode":periode,
                      "kode_wilayah":kode_wilayah,
                      "nama_petugas":nama_petugas,
                      "uploaded_file": upload_file] as [String : AnyObject]

        let URL = "myURL"

        Alamofire.upload(
            multipartFormData: { (multipartFormData) in
                if let imageData = upload_file?.jpegData(compressionQuality: 0.3){
                    multipartFormData.append(imageData, withName: self.myFileName)
                }
        }, to:URL)
        { (result) in
            switch result {
            case .success(let upload, _ , _):
                upload.uploadProgress(closure: { (progress) in    
                    //print("uploding")
                    print("Upload Progress: \(progress.fractionCompleted)")
                })  
                upload.responseJSON { response in
                    debugPrint(response)
                    print("done")
                    print(response.result.value)   
                }    
            case .failure(let encodingError):
                print("failed")
                print(encodingError)  
            }
        }
    }

И это из функции выбора изображения, и нет проблем с выбором изображения из галереи.

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
myImageView.image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
            let data = image.pngData()! as NSData
            data.write(toFile: localPath!, atomically: true)
            let photoURL = URL.init(fileURLWithPath: localPath!) 
        }
        self.dismiss(animated: true, completion: nil)  
    }

Я могу получить путь, но не могу дать его функции загрузки. Я очень признателен за вашу помощь.

1 Ответ

0 голосов
/ 25 июня 2019

Попробуйте, я думаю, это поможет вам.

    func imagupload(){
       let periode = periodeField.text
       let kode_wilayah = kodeWilayahField.text
       let nama_petugas = namaPetugasField.text
       let upload_file = myImageView.image

        var parameters = [String:AnyObject]()
        parameters = ["periode":periode,
                      "kode_wilayah":kode_wilayah,
                      "nama_petugas":nama_petugas,
                      "uploaded_file": upload_file] as [String : AnyObject]

        let URL = "myURL"


                        requestWith(endUrl: URL, imageData: myImageView.image!.jpegData(compressionQuality: 1.0), parameters: parameters, onCompletion: { (json) in
                            print(json)

                        }) { (error) in
                            print(error)

                        }
                    }


      func requestWith(endUrl: String, imagedata: Data?, parameters: [String : String], onCompletion: ((JSON?) -> Void)? = nil, onError: ((Error?) -> Void)? = nil){

        let url = endUrl


        let headers: HTTPHeaders = [

            "Content-type": "multipart/form-data"
        ]

        Alamofire.upload(multipartFormData: { (multipartFormData) in
            for (key, value) in parameters {
                multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
            }

            if let data = imagedata{
                multipartFormData.append(data, withName: "imagename", fileName: "imagename.jpg", mimeType: "image/jpeg")
            }

        }, to:url,headers: headers)
        { (result) in
            switch result{
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    let json : JSON = JSON(response.result.value)
                     print(json)
                    if let err = response.error{
                        onError?(err)

                        return
                    }
                    onCompletion?(json)

                }
            case .failure(let error):
               //print("Error in upload: \(error.localizedDescription)")
                onError?(error)

            }

        }

    }

используется только функция imagupload, когда вы используете,

self.imagupload()
...