1

I want to make laravel api for multiple file upload when i am uploading then its gives error $data is undefined variable.please help me how to remove this error..?

FileUploadController.php

<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use App\Detail;

use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Auth;
class FileUploadController extends Controller
{
    public function uploadFile(Request $request){

        $this->validate($request, [

        'user_sharing_image' => 'required',

        'user_sharing_image.*' => 'mimes:doc,pdf,docx,zip'

        ]);

        if($request->hasfile('user_sharing_image'))

         {
            foreach($request->file('user_sharing_image') as $file)

            {
                $name=$file->getClientOriginalName();

                $file->move(public_path().'/files/', $name);  

                $data[] = $name;  
            }
         }

         $file= new Detail();
         $file->title = $request->title;
         $file->info = $request->info;
         $file->user_id = $request->user()->id;
         $file->user_sharing_image=json_encode($data);

         $file->save();

        return back()->with('success', 'Data Your files has been successfully added');
    }
}

I am using laravel passport for auth and want to store user_id but do not geting please help me how to resolve both problem from this code

4 Answers 4

4

Give it a try

$data = [];
if($request->hasfile('user_sharing_image'))
 {
    foreach($request->file('user_sharing_image') as $key=>$file)

    {
        $name=$file->getClientOriginalName();    
        $file->move(public_path().'/files/', $name);      
        $data[$key] = $name;  
    }
 }

 $file= new Detail();
 $file->title = $request->title;
 $file->info = $request->info;
 $file->user_id = Auth::user()->id;
 $file->user_sharing_image=json_encode($data);

 $file->save();
Sign up to request clarification or add additional context in comments.

2 Comments

this is my route Route::post('file-upload', 'API\FileUploadController@uploadFile'); when hit the api the its gives login page in postman
if you want to get auth data using Auth::user(), you need to use passport package. follow laravel.com/docs/5.7/passport. Otherwise pass user_id in your request data.
0

You are getting this error because $data is not defined.

Before foreach loop you can declare it as $data = array();

1 Comment

its gives error Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini
0

Hello fellow developers

This will work properly

 $files = $request->allFiles('imgs');

            foreach ($files as $key => $img) {
                # code...
                $filename = request()->getSchemeAndHttpHost() . '/assets/images/users/upload/profile/photos/' . time() . '.'. $img->extension();
                $img->move(public_path('/assets/images/users/upload/profile/photos/'), $filename);


                $photos = UserPhoto::create([
                    'user_id' => $user->id,
                    'name' => $filename
                ]);
            }


            return response()->json([
                'status' => true,
                'data' => 'Photos Uploaded Successfully!!'
            ]);

Comments

-1

i think you should use files method to return array of files :

     foreach($request->files('user_sharing_image') as $file)

1 Comment

BadMethodCallException: Method App\Http\Requests\DamageReportRequest::files does not exist Please make sure files is correct

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.