2017-01-17 3 views
0

In meiner App möchte ich einige Bilder auf den Server hochladen. Das Problem ist, dass ich es nicht hochladen kann. Der gleiche Code funktioniert gut für Server und ich bin in der Lage, das Image hochzuladen. Aber für laravel Server kann ich es nicht hochladen.Bild Upload auf Laravel Server iOS

-Code

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 
    } 

} 

Antwort, die ich

<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 

Die Art, wie ich die Funktion

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 verwende ich immer -> ich alle Parameter sende richtig !.

+0

Der Fehler sieht so aus, als würden Sie die Validierung einfach nicht bestehen. Vielleicht die Art, wie du deine Daten postest. Versuchen Sie, es zu verschiedenen Formen wie 'Form-data' oder' urlencoded' zu tauschen und sehen Sie, welcher Ihnen einen anderen Fehler gibt. Ich helfe dir beim Debuggen. – EddyTheDove

+0

Können Sie Ihre Anfrage params? – Paras

+0

@Paras Ich habe meinen Beitrag bearbeitet, bitte sehen Sie sich um. –

Antwort

0

Entweder Sie schlagen den falschen API-Endpunkt oder falsches params vorbei, Da in Ihrem Code, Sie versuchen, ein Bild hochladen, aber der API-Endpunkt muss die userId, propertyId, title und description die notwendigen Parameter sind zu akzeptieren das Bild. Ich kann diese Werte in Ihrer Anfrage nicht sehen.

+0

ich übergebe die richtigen Parameter –