如何在iOS中将图像数据上传到服务器? [英] How to upload image data to server in iOS?

查看:115
本文介绍了如何在iOS中将图像数据上传到服务器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用swift将我的图像数据存储在iOS服务器上。我尝试了下面的代码,但它无法正常工作我必须做什么改变?

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 ??

想要上传6张图片。这是我的控制器视图,点击保存后想要存储在服务器上

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)"
}


推荐答案

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
            }
    })
}

请尝试...

这篇关于如何在iOS中将图像数据上传到服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆