2017-06-12 194 views
0

我想使用swift将我的图像数据存储在iOS服务器上。我试过下面的代码,但它不工作我必须做什么改变?如何在iOS上将图像数据上传到服务器?

想上传6张图片。 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)" 
} 
+0

你得到什么错误?还有服务器日志中的任何内容? – geminiCoder

+0

@geminiCoder其doen显示XCode中的任何错误。但仍未上传到服务器上。在服务器上它显示 - 这个目录是空的。意味着数据没有上传! –

+0

所以我的第一个问题是,实际上被发送到服务器的东西,即在服务器日志中是否显示POST?在Linux上,日志通常在/ var/log /中查找apache或httpd,并且应该有一个访问日志。 – geminiCoder

回答

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

请尝试...

0

请给下面的代码将图片上传您的服务器上一试,也有一个替代文件名变量值要在其中发送将图像文件发送到您的服务器。

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

在你的PHP服务器,你可以得到你这样的文件名

<?php 
    echo $_FILES['file']['name']; 
?> 
+0

如果您在传递“urlString:String”的情况下使用此方法,那么让body = NSMutableData() if参数=参数{key,value)参数{ 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)!) } } –

相关问题