簡體   English   中英

使用 alamofire 上傳帶參數的圖像

[英]Upload Image with Parameters using alamofire

我正在嘗試使用 alamofire 將圖像連同參數一起發送到服務器,但我不知道天氣是否正確。我沒有收到響應,收到類似錯誤

{
    errors =     {
        avatar =         (
            "The avatar must be an image.",
            "The avatar must be a file of type: jpeg, jpg, png."
        );
        city =         (
            "The city may not be greater than 50 characters."
        );
        state =         (
            "The state may not be greater than 50 characters."
        );
    };
    message = "Invalid input.";
    status = 400;
    success = 0;
}

如果有人幫助我,那就太好了。 預先感謝

    let imageobj = img.image!
    let data = imageobj.pngData()


    let acce:String = UserDefaults.standard.string(forKey: "access")!
    print(acce)

    let headers:HTTPHeaders = ["Authorization":"Bearer \(acce)"]

    postParameters = ["name":username,"password":pass,"password_confirmation":confirmpass,"city":newcity,"state":newstate,"address":addre]
    print(postParameters)

    let userData:Data = try! JSONSerialization.data(withJSONObject: postParameters)


    Alamofire.upload(multipartFormData: { (multiFoormData) in
        multiFoormData.append(userData, withName: "name")
        multiFoormData.append(userData, withName: "password")
        multiFoormData.append(userData, withName: "password_confirmation")
        multiFoormData.append(userData, withName: "city")
        multiFoormData.append(userData, withName: "state")
        multiFoormData.append(userData, withName: "address")
        multiFoormData.append(userData, withName: "avatar", mimeType: "image/png")
    }, to: Constants.Userdetailsapi,method:.post,
       headers:headers,
       encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
                print(response)
            }
        case .failure(let encodingError):
            print(encodingError)
        }
    })
if let  img = info[UIImagePickerControllerOriginalImage] as? UIImage{

        self.imgProfileImage.image = info[UIImagePickerControllerOriginalImage] as? UIImage

        let imgData = UIImageJPEGRepresentation(img, 0.5)!

        let parameters = ["service_type":"que_update_profile",
                          "user_id":UserDefaults.standard.string(forKey: "user_id")  ?? "",
                          "que_m_firstname":self.txtFirstName.text!,
                          "que_m_lastname":self.txtLastName.text!,
                          "que_m_birthdate":self.lblDateofBirth.text!,
                          "que_m_gender":"\(self.selectedGender)",
                          "que_m_phone":self.txtPhone.text!,
                          "que_m_address":self.txtAddress.text!] as [String : Any] //Optional for extra parameter

        Alamofire.upload(multipartFormData: { multipartFormData in
            multipartFormData.append(imgData, withName: "profile_imgname",fileName: "ProfilePic_\(UserDefaults.standard.string(forKey: "user_id") ?? "").jpg", mimeType: "image/jpg")
            for (key, value) in parameters {
                multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
            } //Optional for extra parameters
        },
                         to:"Server URL Here.")
        { (result) in
            switch result {
            case .success(let upload, _, _):

                upload.uploadProgress(closure: { (progress) in
                    print("Upload Progress: \(progress.fractionCompleted)")
                })

                upload.responseJSON { response in
                    print(response.result.value)
                }

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

    }
    self.dismiss(animated: true, completion: nil)

您可以遵循以下結構:

let imageobj = img.image!
let data = imageobj.pngData()

let acce:String = UserDefaults.standard.string(forKey: "access")!
print(acce)

let headers:HTTPHeaders = ["Authorization":"Bearer \(acce)"]
  let ImageData = UIImagePNGRepresentation(imageobj)
  let urlReq = Constants.Userdetailsapi
  let params : Parameters = ["name":username,"password":pass,"password_confirmation":confirmpass,"city":newcity,"state":newstate,"address":addre]

        Alamofire.upload(multipartFormData: { multipartFormData in
            multipartFormData.append(ImageData!, withName: "avatar",fileName: "file.jpg", mimeType: "image/jpg")
            for (key, value) in params {// this will loop the 'parameters' value, you can comment this if not needed
                multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
            }
        },
                         to:urlReq)
        { (result) in
            switch result {
            case .success(let upload, _, _):

                upload.uploadProgress(closure: { (progress) in
                    print("Upload Progress: \(progress.fractionCompleted)")
                })

                upload.responseJSON { response in
                     completion("success")
                    }

            case .failure(let encodingError):
                print(encodingError)
                completion("failed")

            }
        }

希望這會奏效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM