【发布时间】:2018-04-28 06:01:57
【问题描述】:
我有这个代码:
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=查询取消}
当我想上传图片时。
【问题讨论】:
-
使用edit将代码添加到问题本身。
-
我做到了,现在?
-
可能不相关,但如果有原生结构,请不要使用
NSMutable...类。 (Data和URLRequest) -
我的问题是,它没有上传文件,它在 ImageView 中显示文件,但它没有上传到我的数据库,它显示错误
-
如前所述,
Data和URLRequest。正如variable 两者都是可变的。
标签: swift