How to upload image data to server in iOS?

2019-04-17 07:21发布

I want to store my image data on server in iOS using swift. i tried following code, but its not working what changes i have to do ??

Want to upload 6 images.this is my controller view, after clicking save it want to store at server

func myImageUploadRequest()
{

    let myUrl = NSURL(string: "http://easemyshop.in/upload_test/new.php");
    //let myUrl = NSURL(string: "http://easemyshop.in/upload_test/new.php");

    let request = NSMutableURLRequest(url:myUrl! as URL);
    request.httpMethod = "POST";

    let param = [


        "tag"  : "all",
        "count"    : "1",
        "shopname"    : "MayurShop",
        "partyName"    : "Paras",
        "cur_date"    : "14-06-2017",
        "due_date"    : "20-06-2017",
        "karagir"    : "Santra",
        "remark"    : "Urgent",
        "order_status"    : "Order Reccived"

    /*
        "firstName"  : "Mayur",
        "lastName"    : "Shinde",
        "userId"    : "101"

        */
    ]

    let boundary = generateBoundaryString()

    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")


    let imageData = UIImageJPEGRepresentation((imageView?.image!)!, 1)

    if(imageData==nil)  { return; }

    request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data

    myActivityIndicator.isHidden = false
    myActivityIndicator.startAnimating();

    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("\n\n******* response *******\n\n")
        print("\(response!)")
    print("\n\n**************************\n\n")

        // Print out reponse body
        let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)

        print("\n\n****** response data *******\n\n")
        print("\(responseString!)")
        print("\n\n**************************\n\n")

        do
        {
            let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary

            print("\n\n*************\n\n")
            print(json!)
            print("\n\n*************\n\n")

            DispatchQueue.main.async(execute: {
                self.myActivityIndicator.stopAnimating()
                self.myActivityIndicator.isHidden = true
                //self.imageView?.image = nil;
            });

        }
        catch
        {
            print("\n\n*************ERROR******** => \(error)\n\n")
        }

    }

    task.resume()
}


func createBodyWithParameters(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 = "user-profile.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 generateBoundaryString() -> String {
    return "Boundary-\(NSUUID().uuidString)"
}

标签: ios swift3
2条回答
相关推荐>>
2楼-- · 2019-04-17 08:24

Please give a try with below code to upload the image on your server, also replace fileName variable value with one in which you want to send the image file to your server.

func uploadImage(urlString:String,headers:[String:String]?,params:[String:String]?,image:UIImage?){
    let boundary: String = "------VohpleBoundary4QuqLuM1cE5lMwCy"
    let contentType: String = "multipart/form-data; boundary=\(boundary)"

    let request = NSMutableURLRequest()
    request.url = URL(string: urlString)
    if let tHeaders = headers {
        for (key, value) in tHeaders {
            request.setValue(value, forHTTPHeaderField: key)
        }
    }
    request.httpShouldHandleCookies = false
    request.timeoutInterval = 60
    request.httpMethod = "POST"
    request.setValue(contentType, forHTTPHeaderField: "Content-Type")

    let body = NSMutableData()
    if let parameters = params {
        for (key, value) in parameters {
            body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
            body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: String.Encoding.utf8)!)
            body.append("\(value)\r\n".data(using: String.Encoding.utf8)!)
        }
    }
    //which field you have to sent image on server
    let fileName: String = "file"
    if image != nil {
        body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
        body.append("Content-Disposition: form-data; name=\"\(fileName)\"; filename=\"image.png\"\r\n".data(using: String.Encoding.utf8)!)
        body.append("Content-Type:image/png\r\n\r\n".data(using: String.Encoding.utf8)!)
        body.append(UIImagePNGRepresentation(image!)!)
        body.append("\r\n".data(using: String.Encoding.utf8)!)
    }
    body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)
    request.httpBody = body as Data
    let session = URLSession.shared
    let task = session.dataTask(with: request as URLRequest) { (data, response, error) in
        if(error != nil){
            print(String(data: data!, encoding: .utf8) ?? "No response from server")
        }
    }
    task.resume()
}

at your PHP server, you can get your file name like this

<?php
   echo $_FILES['file']['name'];
?>
查看更多
老娘就宠你
3楼-- · 2019-04-17 08:27
func webServiceImageUploadForMyProfile(image:UIImage,url:String,method:HTTPMethod,parameters : [String:AnyObject]?,completionHandler:@escaping (JSON?,String)->Void) {

    let url = try! URLRequest(url: url, method: .post, headers: nil)
    Alamofire.upload(multipartFormData:{ multipartFormData in
        if  let imageData = UIImageJPEGRepresentation(image, 0.6) {
            multipartFormData.append(imageData, withName: "image", fileName: "Profile.png", mimeType: "image/png")
        }
        for (key, value) in parameters! {
            multipartFormData.append(value.data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }
        }, with: url, encodingCompletion: {
            encodingResult in
            switch encodingResult {
            case .success(let upload, , ):
                upload.uploadProgress(closure: { (progress) in
                    print("Upload Progress: \(progress.fractionCompleted)")
                })
                upload.responseJSON { response in
                    if(response.result.isSuccess){
                        if let data = response.result.value{
                            let json = JSON(data)
                            print(json)
                            completionHandler(json,String())
                            return
                        }
                    }else {
                        completionHandler(nil,(response.result.error?.localizedDescription)!)
                    }
                    }

            case .failure( _):

                break
            }
    })
}

please try ...

查看更多
登录 后发表回答