princeparaste's avatar

Not able to send Files using GuzzleHttp.

My code to upload files from GuzzleHttp to send request to API is not working. In the API controller its not detecting my image that i sent. So my if condition is never getting executed.

My Controller =>

<?php 
public function contact(Request $request)
    {  
		
		$request_inputs    = $request->all();
		
		$client = new Client();
		$url = env('API_URL')."api/v1/contact";
   
		$myBody['name'] = $request_inputs['name'];
		$myBody['email'] = $request_inputs['email'];
		$myBody['phone'] = $request_inputs['phone'];
		$myBody['message'] = $request_inputs['description'];
		
		$headers = [
			'Content-Type' => 'application/json'
		];
		
		$image_data = $request->file('file');
        $filename =  $request->file('file')->getClientOriginalName();
        $file_path = $image_data->getPathName();
		
		try {
			$request = $client->post($url,[
			    'multipart' => [
						[
							'name'     => 'image',
							'contents' => file_get_contents($image_data),
							'filename' =>$filename,
						],[
							'name'=>'user_id',
							'contents'=>'20'
						]
					],
			'headers' => $headers,'json'=>$myBody]);
			$response = $request->getBody();
			$data = json_decode($response);
			$msg = $data
			
		} catch (\Exception $e) {
				$status = 0;
				$msg = $msg = $e->getMessage();
		}
		
		echo json_encode(array('status'=>$status,'msg'=>$msg));
		
		
	}

My Api Controller =>

public function postContactData(Request $request)
   	{
        $image = "";

        if ($files = $request->file('image'))
        {
            print_r("Adfasd");die;
            $path = public_path('/images/users/contactus/');
            $image = date('YmdHis') . "." . $files->getClientOriginalExtension();
            $files->move($path, $image);
            $image = url('/images/users/contactus/' . $image);
        }


   }
0 likes
1 reply
frankielee's avatar

For file upload, the content-type should be multipart/form-data. Unless you convert the image to the binary string.

Check the guide https://laravel.com/docs/8.x/http-client#multi-part-requests

Example

   $response = Http::attach(
        'contents', file_get_contents($image_data), $filename
    )->post('http://gtr3.test/api/v1/test-upload', [
        'name' => 'user_id',
        'contents' => '20',

    ]);

Please or to participate in this conversation.