我有这段代码:
import UIKit
class ProfileViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//get User details
let username = (user!["username"]! as AnyObject).uppercased
let fullname = user!["fullname"] as? String
let email = user!["email"] as? String
let ava = user!["ava"] as? String
UsernameLbl.text = username
FullnameLBL.text = fullname
emailLbl.text = email
}
@IBOutlet weak var UsernameLbl: UILabel!
@IBOutlet weak var avaImg: UIImageView!
@IBOutlet weak var emailLbl: UILabel!
@IBOutlet weak var FullnameLBL: UILabel!
@IBAction func edit_click(_ sender: Any) {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = UIImagePickerControllerSourceType.photoLibrary
picker.allowsEditing = true
self.present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
avaImg.image = info[UIImagePickerControllerEditedImage] as? UIImage
self.dismiss(animated: true, completion: nil)
uploadAva()
}
func createBodyWithParams(parameters: [String : String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
let body = NSMutableData();
if parameters != nil{
for (key, value) in parameters!{
body.appendString(string: "--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString(string: "\(value)\r\n")
}
}
let filename = "ava.jpg"
let mimetype = "image/jpg"
body.appendString(string: "--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")
body.append(imageDataKey as Data)
body.appendString(string: "\r\n")
body.appendString(string: "--\(boundary)--\r\n")
return body
}
func uploadAva(){
print(1)
let id = user!["id"] as! String
let url = URL(string: "myURL.uploadAva.php")!
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
let param = ["id" : id]
let boundary = "Boundary-\(NSUUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let imageData = UIImageJPEGRepresentation(avaImg.image!, 0.5)
if imageData == nil{
return
}
request.httpBody = createBodyWithParams(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data
URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data: Data?, response: URLResponse?, error: Error?) -> Void in
DispatchQueue.main.async{
if error == nil{
do{
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
guard let parseJSON = json else{
print("Error while parsing")
return
}
print(parseJSON)
}catch{
print("Caught an error: \(error)")
}
}else{
print(error)
}
}
}).resume()
}
}
extension NSMutableData{
func appendString(string: String){
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
append(data!)
}
}
但Xcode总是给我:
发现扩展时遇到错误:错误 Domain = PlugInKit Code = 13“查询已取消” UserInfo = {NSLocalizedDescription = query canceled}
当我想上传图片时。
答案 0 :(得分:1)
这对我有用:
从Xcode菜单打开:产品>方案>编辑方案>在您的环境变量上设置OS_ACTIVITY_MODE值set