2017-06-12 15 views
0

iOSのサーバーに画像データをswiftで保存したい。私は次のコードを試してみましたが、私は何をしなければならないのですか?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 
      } 
    }) 
} 

また、あなたが送信したいものとfileNameに変数の値を置き換え、サーバーに画像をアップロードするコードの下で試してみてください...

0

を試してみてくださいイメージファイルをサーバーに転送します。あなたのPHPサーバで

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 
    echo $_FILES['file']['name']; 
?> 
+0

"urlString:String"を渡すこのメソッドでは、letパラメータ= params { (パラメータ、(key.value))の場合、ボディ= NSMutableData()を にします。 body.append " - (境界)\ r \ n" .data(using:String.Encoding.utf8) body.append( "コンテンツ - 配置:フォームデータ; name = \" \(キー)\ " ( ":String.Encoding.utf8)!) body.append(" \(value)\ r \ n ".data(using:String.Encoding.utf8)!) } } –

関連する問題