Bird
Raised Fist0
Laravelframework~5 mins

File uploads in Laravel

Choose your learning style10 modes available
Introduction

File uploads let users send files like images or documents to your website. Laravel makes handling these uploads easy and safe.

Allow users to upload profile pictures on their account page.
Let customers attach files when submitting a support ticket.
Enable uploading product images in an online store admin panel.
Accept resumes or documents in a job application form.
Syntax
Laravel
<?php

// In your controller method handling the form submission
public function uploadFile(Request $request) {
    $request->validate([
        'file' => 'required|file|mimes:jpg,png,pdf|max:2048',
    ]);

    $path = $request->file('file')->store('uploads');

    return back()->with('success', 'File uploaded to ' . $path);
}

Use $request->file('input_name') to get the uploaded file.

The store method saves the file in the storage/app/uploads folder by default.

Examples
This example only accepts image files up to 1MB and stores them in the 'images' folder.
Laravel
<?php
// Validate and store an image file
$request->validate(['image' => 'required|image|max:1024']);
$path = $request->file('image')->store('images');
This saves the uploaded file in 'docs' folder using its original filename.
Laravel
<?php
// Store file with original name
$file = $request->file('document');
$filename = $file->getClientOriginalName();
$file->storeAs('docs', $filename);
Always check if a file was uploaded before trying to store it.
Laravel
<?php
// Check if file was uploaded
if ($request->hasFile('photo')) {
    $path = $request->file('photo')->store('photos');
}
Sample Program

This example shows a simple Laravel controller with two methods: one to show the upload form and one to handle the file upload. The form uses enctype="multipart/form-data" to allow file sending. The controller validates the file type and size, stores it, and returns a success message.

Laravel
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FileUploadController extends Controller
{
    public function showForm()
    {
        return view('upload-form');
    }

    public function uploadFile(Request $request)
    {
        $request->validate([
            'file' => 'required|file|mimes:jpg,png,pdf|max:2048',
        ]);

        $path = $request->file('file')->store('uploads');

        return back()->with('success', 'File uploaded to ' . $path);
    }
}

// Blade view: resources/views/upload-form.blade.php
//
// <form method="POST" action="{{ route('file.upload') }}" enctype="multipart/form-data">
//     @csrf
//     <input type="file" name="file" aria-label="Choose file to upload" required>
//     <button type="submit">Upload</button>
// </form>
//
// @if(session('success'))
//     <p>{{ session('success') }}</p>
// @endif
OutputSuccess
Important Notes

Always validate uploaded files to avoid security risks.

Use enctype="multipart/form-data" in your HTML form to enable file uploads.

Files are stored in storage/app by default. Use php artisan storage:link to make them accessible publicly.

Summary

Laravel makes file uploads simple with built-in methods.

Always validate files for type and size before saving.

Use proper form encoding and check if files exist before processing.

Practice

(1/5)
1. In Laravel, which method is used to check if a file was uploaded in a request?
easy
A. $request->isFile('file')
B. $request->hasFile('file')
C. $request->checkFile('file')
D. $request->fileExists('file')

Solution

  1. Step 1: Identify Laravel method to check file upload

    Laravel provides hasFile to verify if a file was uploaded in the request.
  2. Step 2: Compare options with Laravel documentation

    Only hasFile is the correct method; others do not exist in Laravel.
  3. Final Answer:

    $request->hasFile('file') -> Option B
  4. Quick Check:

    Check file upload with hasFile() = D [OK]
Hint: Use hasFile() to check uploaded files quickly [OK]
Common Mistakes:
  • Using non-existent methods like fileExists()
  • Confusing hasFile() with file() method
  • Not checking if file exists before processing
2. Which HTML form attribute is required to upload files in Laravel?
easy
A. enctype="multipart/form-data"
B. method="post"
C. action="upload.php"
D. type="file"

Solution

  1. Step 1: Identify form attribute for file uploads

    File uploads require the form to have enctype="multipart/form-data" to send file data properly.
  2. Step 2: Check other attributes

    method="post" is needed but not enough alone; type="file" is for input, not form; action defines URL, not upload encoding.
  3. Final Answer:

    enctype="multipart/form-data" -> Option A
  4. Quick Check:

    Form encoding for files = B [OK]
Hint: Always set enctype to multipart/form-data for file uploads [OK]
Common Mistakes:
  • Omitting enctype attribute
  • Using GET method instead of POST
  • Confusing input type with form attribute
3. What will be the output of this Laravel code snippet after uploading a file named photo.jpg?
$path = $request->file('photo')->store('images');
return $path;
medium
A. "photo.jpg"
B. "images/photo.jpg"
C. "/storage/images/photo.jpg"
D. "images/unique_generated_name.jpg"

Solution

  1. Step 1: Understand store() method behavior

    The store() method saves the file in the specified folder with a unique generated filename to avoid overwriting.
  2. Step 2: Analyze returned path

    The returned path includes the folder and the unique filename, not the original filename or full storage path.
  3. Final Answer:

    "images/unique_generated_name.jpg" -> Option D
  4. Quick Check:

    store() returns folder + unique filename = A [OK]
Hint: store() saves file with unique name, returns folder plus new filename [OK]
Common Mistakes:
  • Assuming original filename is kept
  • Expecting full storage path returned
  • Confusing store() with move() method
4. Identify the error in this Laravel file upload code:
if ($request->hasFile('avatar')) {
  $file = $request->file('avatar');
  $file->move('uploads');
}
medium
A. Missing second argument for move() method
B. Incorrect method to check file existence
C. move() should be called on $request, not $file
D. No error, code is correct

Solution

  1. Step 1: Review move() method signature

    The move() method requires two arguments: destination path and filename.
  2. Step 2: Check code arguments

    Only one argument ('uploads') is given; filename is missing, causing an error.
  3. Final Answer:

    Missing second argument for move() method -> Option A
  4. Quick Check:

    move() needs path and filename = C [OK]
Hint: move() needs destination path and filename both [OK]
Common Mistakes:
  • Calling move() with only one argument
  • Confusing hasFile() with fileExists()
  • Calling move() on request instead of file
5. You want to upload multiple images and save their paths in the database. Which Laravel approach correctly handles multiple file uploads in a request named photos?
hard
A.
if ($request->hasFile('photos')) {
  $path = $request->file('photos')->store('gallery');
  Photo::create(['path' => $path]);
}
B.
$photos = $request->file('photos');
$photos->store('gallery');
Photo::create(['path' => $photos]);
C.
foreach ($request->file('photos') as $photo) {
  $path = $photo->store('gallery');
  Photo::create(['path' => $path]);
}
D.
$path = $request->file('photos')->move('gallery');
Photo::create(['path' => $path]);

Solution

  1. Step 1: Understand multiple file upload handling

    Multiple files come as an array; you must loop through each file to store and save paths.
  2. Step 2: Analyze options for correct looping and storing

    foreach ($request->file('photos') as $photo) {
      $path = $photo->store('gallery');
      Photo::create(['path' => $path]);
    }
    loops over each file, stores it, and saves path correctly. Others treat files as single or misuse methods.
  3. Final Answer:

    Loop through each file, store, and save path -> Option C
  4. Quick Check:

    Multiple files need foreach loop = A [OK]
Hint: Use foreach to handle multiple uploaded files individually [OK]
Common Mistakes:
  • Treating multiple files as single file
  • Not looping through file array
  • Calling store() on file array directly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard