gpt4 book ai didi

ios - 对成员 'upload(_:to:method:headers:interceptor:)' 的模糊引用

转载 作者:行者123 更新时间:2023-11-28 07:28:34 25 4
gpt4 key购买 nike

我正在使用 Alamofire 按按钮上传图片,但它在

处显示错误

AF.upload(multipartFormData: { MultipartFormData line of method

(注意:Alamofire.upload 在 Alamofire 5.0 更新后改为 AF.upload)

@IBAction func btnUploadImage(_ sender: UIButton) {

let uploadDict = ["user_id":getUserId] as [String:String]

AF.upload(multipartFormData: { MultipartFormData in

let image :Data = UIImageJPEGRepresentation(self.uploadImg.image!, 1.0)!

MultipartFormData.append(image, withName: "image" , fileName: "image.jpeg" , mimeType: "image/jpeg")
for(key,value) in uploadDict{

MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)}

}, to: "http://XXXXXXXXXXXXXXXX/uploadImage", encodingCompletion: {
EncodingResult in
switch EncodingResult{
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint("SUCCESS RESPONSE: \(response)")
}
case .failure(let encodingError):

print("ERROR RESPONSE: \(encodingError)")

} })

//此代码的 View Controller

import UIKit
import Alamofire
class updateVC: UIViewController, UIImagePickerControllerDelegate,UINavigationControllerDelegate {

//MARK:- OUTLETS
@IBOutlet weak var tFeditName: UITextField!
@IBOutlet weak var tFusername: UITextField!
@IBOutlet weak var tFemail: UITextField!
@IBOutlet weak var uploadImg: UIImageView!
@IBOutlet weak var tVeditAddress: UITextView!


//MARK:- DECLARATIONS

var imagePicker = UIImagePickerController()

var editName = String()
var editUserName = String()
var editEmail = String()
var editImage = UIImage()
var editAddress = String()
var getUserId = String()

//MARK:- LIFE CYCLE
override func viewDidLoad() {
super.viewDidLoad()

imagePicker.delegate = self

tFeditName.text = editName
tFusername.text = editUserName
tFemail.text = editEmail
uploadImg.image = editImage
tVeditAddress.text = editAddress

}
//MARK:- CUSTOM FUNCTIONS

func postJSON() {

let param = ["fullname":tFeditName.text!,"username":tFusername.text!,"email":tFemail.text!,"address":tVeditAddress.text!,"user_id":getUserId] as NSDictionary


AF.request("http://XXXXXXXXXXXXXXXXXXXX/updatedetails", method: .post, parameters: param as? Parameters, encoding: URLEncoding.default).responseJSON { response in

switch response.result{

case .success(let json):
print(json)

DispatchQueue.main.async {
print(param)
}
case.failure(let Error):

print(Error)
}
}

}

//ImageViewPicker

func openCamera()
{
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerController.SourceType.camera
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}
else
{
let alert = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}

func openGallery()
{
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.allowsEditing = true
imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
self.present(imagePicker, animated: true, completion: nil)
}
else
{
let alert = UIAlertController(title: "Warning", message: "You don't have permission to access gallery.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}

internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

uploadImg.image = pickedImage

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



//MARK:- ACTIONS

@IBAction func btnSelectImage(_ sender: UIButton) {

let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: { _ in
self.openCamera()
}))

alert.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { _ in
self.openGallery()
}))

alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: nil))

self.present(alert, animated: true, completion: nil)


}

@IBAction func btnUploadImage(_ sender: UIButton) {

let image: UIImage? = self.uploadImg.image

let uploadDict = ["user_id":getUserId] as [String:String]

AF.upload(multipartFormData: { MultipartFormData in

let image :Data = (image?.jpegData(compressionQuality: 1))!

MultipartFormData.append(image, withName: "image" , fileName: "image.jpeg" , mimeType: "image/jpeg")
for(key,value) in uploadDict{

MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)}

}, to: "http://XXXXXXXXXXXXXXXX/uploadImage", encodingCompletion: {
EncodingResult in
switch EncodingResult{
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint("SUCCESS RESPONSE: \(response)")
}
case .failure(let encodingError):

print("ERROR RESPONSE: \(encodingError)")

} })

}
@IBAction func btnUpdateDetails(_ sender: UIButton) {

postJSON()
self.navigationController?.popViewController(animated: true)
}

最佳答案

来自 Alamofire 5.0 迁移指南:

  • MulitpartFormData’s API has changed and the top level upload methods to create and upload MultipartFormData have been updated to match other request APIs, so it’s not longer necessary to deal with the Result of the multipart encoding.

所以你的代码应该是这样的:

@IBAction func btnUploadImage(_ sender: UIButton) {
let uploadDict = ["user_id": "getUserId"] as [String:String]

AF.upload(multipartFormData: { MultipartFormData in

let image: Data = self.uploadImg.image!.jpegData(compressionQuality: 1.0)!

MultipartFormData.append(image, withName: "image" , fileName: "image.jpeg" , mimeType: "image/jpeg")
for(key,value) in uploadDict {
MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
}
}, to: "http://XXXXXXXXXXXXXXXX/uploadImage", method: .post, headers: ["Content-Type": "application/json",
"authorization": "bearer \(token)"])
.responseJSON { (response) in
debugPrint("SUCCESS RESPONSE: \(response)")
}
}

因此您不需要关闭 encodingCompletion 并立即使用 responseJSON。

关于ios - 对成员 'upload(_:to:method:headers:interceptor:)' 的模糊引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55686247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com