2017-01-17 15 views
0

私のアプリでは、サーバーにイメージをほとんどアップロードしません。問題は私がそれをアップロードすることができないということです。同じコードはサーバーでうまく動作し、画像をアップロードすることができます。laravelサーバーの場合、アップロードできません。 >私が正しく、すべてのパラメータを送信しています - 私はイメージはlaravelサーバーにアップロードされました。iOS

<OS_dispatch_data: data[0x7fe220759040] = { leaf, size = 30, buf = 0x7fe22063cff0 }> 

Optional({"status_code":422,"status":"Failure","response":{"userId":["The user id field is required."],"propertyId":["The property id field is required."],"title":["The title field is required."],"description":["The description field is required."]},"message":"422 Unprocessable Entity","debug":{"line":22,"file":"\/var\/www\/html\/embassy\/vendor\/dingo\/api\/src\/Http\/FormRequest.php","class":"Dingo\\Api\\Exception\\ValidationHttpException","trace":["#0 \/var\/www\/html\/embassy\/vendor\/laravel\/framework\/src\/Illuminate\/Validation\/ValidatesWhenResolvedTrait.php(25): Dingo\\Api\\Http\\FormRequest->failedValidation 

方法を取得しています

コード

func sendImageWithParams(image:UIImage, url : String,photoParamKey:String,params : [String:String],quality:CGFloat=0.7,getResponse : Response) -> Void { 

     let request = NSMutableURLRequest(URL: NSURL(string: url)!); 
     request.HTTPMethod = "POST" 
     let boundary = generateBoundaryString() 
     request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 
     let imageData = UIImageJPEGRepresentation(image, quality) 

     if(imageData==nil) { return; } 

     request.HTTPBody = createBodyWithParameters(params,photoParamKey:photoParamKey, imageDataKey: imageData!, boundary: boundary) 
     request.timeoutInterval = 20.0 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request, 
                    completionHandler: { 
                     (data, response, error) -> Void in 
                     if let data = data { 

                      getResponse(success: data, error: nil) 


                     } else if let error = error { 
                      getResponse(success: nil , error: error) 
                     } 
     }) 
     task.resume() 

    } 

    func generateBoundaryString() -> String { 
     return "Boundary-\(NSUUID().UUIDString)" 
    } 
    func createBodyWithParameters(parameters: [String: String]?,photoParamKey : String,imageDataKey: NSData, boundary: String) -> NSData { 

     let body = NSMutableData(); 

     if parameters != nil { 
      for (key, value) in parameters! { 
       body.appendString("--\(boundary)\r\n") 
       body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
       body.appendString("\(value)\r\n") 
      } 
     } 

     let mimetype = "image/jpg" 
     let filename = "image" 
     body.appendString("--\(boundary)\r\n") 
     body.appendString("Content-Disposition: form-data; name=\"\(photoParamKey)\"; filename=\"\(filename)\"\r\n") 
     body.appendString("Content-Type: \(mimetype)\r\n\r\n") 
     body.appendData(imageDataKey) 
     body.appendString("\r\n") 

     body.appendString("--\(boundary)--\r\n") 


     return body 
    } 

} 

応答iは

let p = ["title" : "a", 

         "propertyId":"1", 

         "description":"hey", 

         "userId":"131", 

         "params":"mobile" 

       ] 
NetworkRequest.sharedInstance.sendImageWithParams(imageView.image!, url: "http://52.66.131.92/api/blogs", photoParamKey: "photo", params: p, getResponse: { (success, error) in 
        print("Error:\(error)") 
        print("Success:\(success)") 
       }) 

PS機能を使用しています!

+0

エラーは単純に検証に失敗したようです。おそらくあなたのデータを投稿する方法。 'form-data'や' urlencoded'のような別のフォームに置き換えて、どちらがあなたに違うエラーを与えるのかを見てください。デバッグに役立ちます。 – EddyTheDove

+0

リクエストパラメータを投稿できますか? – Paras

+0

@Paras私は自分の投稿を編集していますが、plsは見ています。 –

答えて

0

どちらか間違ったAPIエンドポイントを打つか、正しくないのparamsを渡す、あなたのコードでは、あなたが画像をアップロードしようとしているので、しかし、APIのエンドポイントが必要とされているuserIdpropertyIdtitleと受け入れるために必要なパラメータですdescription画像。私はあなたの要求でこれらの値を見ることができません。

+0

正しいパラメータを渡しています –

関連する問題