我想将图片上传到服务器端,但我遇到了问题。这是我为它编写的代码:
import UIKit
class ViewControllerngodetails: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UITextFieldDelegate {
@IBOutlet weak var imageviewngo: UIImageView!
@IBOutlet weak var Textngo: UITextField!
@IBOutlet weak var textparentorg: UITextField!
@IBOutlet weak var texttreasurer: UITextField!
@IBOutlet weak var textsecratary: UITextField!
@IBOutlet weak var textchairman: UITextField!
@IBOutlet weak var textcheiffunction: UITextField!
@IBOutlet weak var textngoname: UITextField!
var t = NGOdetails()
//var temp1 = Int()
var img : UIImage!
var picker = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
textngoname.text = t.Nameofngo
textchairman.text = t.NameofChairman
textparentorg.text = t.ParentOrganization
textsecratary.text = t.NameofSeceratary
texttreasurer.text = t.NameofTreasurer
textcheiffunction.text = t.NameofChiefFunctionary
Textngo.text = t.AboutNGO
self.textngoname.delegate = self
self.textchairman.delegate = self
self.textcheiffunction.delegate = self
self.textsecratary.delegate = self
self.texttreasurer.delegate = self
self.textparentorg.delegate = self
self.Textngo.delegate = self
// Do any additional setup after loading the view.
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func update_button(_ sender: Any) {
picker.sourceType = UIImagePickerControllerSourceType.savedPhotosAlbum
picker.delegate = self
self.present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
img = info[UIImagePickerControllerOriginalImage] as! UIImage
self.imageviewngo.image = img
self.dismiss(animated: true, completion: nil)
}
@IBAction func savebutton(_ sender: Any) {
myImageuploadrequest()
}
func myImageuploadrequest()
{
let id = UserDefaults.standard.string(forKey: "NgoId")
var request = URLRequest(url: URL(string: "http://www.shreetechnosolution.com/funded/ngo_profileupdate.php?")!)
request.httpMethod = "POST"
let param = ["Nameofngo" : "\(textngoname.text!)","NameofChiefFunctionary" : "\(textcheiffunction.text!)","NameofChairman" : "\(textchairman.text!)","NameofSeceratary" : "\(textsecratary.text!)","NameofTreasurer" : "\(texttreasurer.text!)","photoofNGO" : "\(img)","ParentOrganization" : "\(textparentorg.text!)","AboutNGO" : "\(Textngo.text!)","ngoid" : "\(id!)","value" : "NGO Details"]
//"photoofNGO" : "\(imageviewngo.image!)",
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let imageData = UIImageJPEGRepresentation(imageviewngo.image!, 1)
if(imageData==nil) { return; }
// request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data
request.httpBody = self.createBodyWithParameters(parameters: param as [String : NSObject], filePathKey: "file", boundary: self.generateBoundaryString()) as Data
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
// You can print out response object
print("******* response = \(response)")
// Print out reponse body
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("****** response data = \(responseString!)")
do {
let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary
print(json ?? "")
DispatchQueue.main.async(execute: {
self.imageviewngo.image = nil;
});
}catch
{
print(error)
}
}
task.resume()
}
//, imageDataKey: NSData
func createBodyWithParameters(parameters: [String: NSObject]?, filePathKey: String?, 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")
}
}
body.appendString(string: "--\(boundary)\r\n")
let filename = "user-profile.jpg"
let mimetype = "image/jpg"
let imageData = UIImageJPEGRepresentation(img, 1)
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 generateBoundaryString() -> String {
return "Boundary-\(NSUUID().uuidString)"
}
}
extension NSMutableData {
func appendString(string: String) {
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
append(data!)
}
}