Assignments Of Day 12 File Uploads

 

Assignments Of Day 12

File Uploads

Assignments on File Uploads

Assignment 1: Basic File Upload Form

Task:
Create a file upload form that allows users to upload any type of file. After uploading, display a success message and save the file in a folder named uploads.

Solution:
HTML Form:

html

Copy code

<form action="/upload" method="POST" enctype="multipart/form-data"> 

  @csrf 

  <label for="file">Upload File:</label> 

  <input type="file" name="file" id="file" required> 

  <button type="submit">Upload</button> 

</form> 

Route:

php

Copy code

Route::post('/upload', [FileUploadController::class, 'uploadFile']); 

Controller:

php

Copy code

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

 

class FileUploadController extends Controller 

{ 

    public function uploadFile(Request $request) 

    { 

        $request->validate([ 

            'file' => 'required|file|max:2048', 

        ]); 

 

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

 

        return back()->with('success', 'File uploaded successfully! File path: ' . $filePath); 

    } 

} 


Assignment 2: Restrict File Type

Task:
Modify the file upload form to only accept .jpg and .png files. If the user tries to upload another file type, show a validation error.

Solution:
Validation in Controller:

php

Copy code

$request->validate([ 

    'file' => 'required|file|mimes:jpg,png|max:2048', 

]); 

Expected Outcome:

  • Users can only upload .jpg and .png files.
  • An error message is shown for other file types:
    "The file must be a file of type: jpg, png."

Assignment 3: Rename Uploaded Files

Task:
When a user uploads a file, rename it to include the current timestamp. For example, if the user uploads example.jpg, it should be saved as timestamp_example.jpg.

Solution:
Controller Code:

php

Copy code

public function uploadFile(Request $request) 

{ 

    $request->validate([ 

        'file' => 'required|file|max:2048', 

    ]); 

 

    $file = $request->file('file'); 

    $newFileName = time() . '_' . $file->getClientOriginalName(); 

    $filePath = $file->storeAs('uploads', $newFileName); 

 

    return back()->with('success', 'File uploaded successfully! File path: ' . $filePath); 

} 


Assignment 4: Display Uploaded Files

Task:
After uploading a file, display the uploaded file's name and a link to download the file.

Solution:
Controller Code:

php

Copy code

public function uploadFile(Request $request) 

{ 

    $request->validate([ 

        'file' => 'required|file|max:2048', 

    ]); 

 

    $file = $request->file('file'); 

    $fileName = time() . '_' . $file->getClientOriginalName(); 

    $filePath = $file->storeAs('uploads', $fileName); 

 

    return back()->with('success', 'File uploaded successfully!') 

                 ->with('fileName', $fileName) 

                 ->with('filePath', $filePath); 

} 

Blade Template:

html

Copy code

@if (session('success')) 

    <p>{{ session('success') }}</p> 

    <p>File Name: {{ session('fileName') }}</p> 

    <a href="{{ asset('storage/uploads/' . session('fileName')) }}" download>Download File</a> 

@endif 


Assignment 5: Multiple File Uploads

Task:
Allow users to upload multiple files simultaneously. Save each file in the uploads folder and display their names after the upload.

Solution:
HTML Form:

html

Copy code

<form action="/upload-multiple" method="POST" enctype="multipart/form-data"> 

  @csrf 

  <label for="files">Upload Files:</label> 

  <input type="file" name="files[]" id="files" multiple required> 

  <button type="submit">Upload</button> 

</form> 

Controller Code:

php

Copy code

public function uploadMultipleFiles(Request $request) 

{ 

    $request->validate([ 

        'files.*' => 'required|file|max:2048', 

    ]); 

 

    $fileNames = []; 

 

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

        $fileName = time() . '_' . $file->getClientOriginalName(); 

        $filePath = $file->storeAs('uploads', $fileName); 

        $fileNames[] = $fileName; 

    } 

 

    return back()->with('success', 'Files uploaded successfully!') 

                 ->with('fileNames', $fileNames); 

} 

Blade Template:

html

Copy code

@if (session('success')) 

    <p>{{ session('success') }}</p> 

    <ul> 

        @foreach (session('fileNames') as $fileName) 

            <li>{{ $fileName }}</li> 

        @endforeach 

    </ul> 

@endif 


Additional Assignments for Practice

1.  File Size Restriction: Limit file uploads to a maximum of 1 MB.

2.  Secure File Uploads: Implement validation to prevent executable files like .exe or .php from being uploaded.

3.  Organized Storage: Save uploaded files in subfolders based on their file type (e.g., images, documents).


These assignments cover various aspects of file uploads, ensuring students practice validation, file handling, and display techniques in Laravel.

4o

You said:

more

ChatGPT said:

ChatGPT

Additional Assignments on File Uploads


Assignment 6: Save Files with Unique IDs

Task:
Save uploaded files using a unique identifier (e.g., UUID) instead of the original file name.

Solution:
Controller Code:

php

Copy code

use Illuminate\Support\Str; 

 

public function uploadFile(Request $request) 

{ 

    $request->validate([ 

        'file' => 'required|file|max:2048', 

    ]); 

 

    $file = $request->file('file'); 

    $uniqueName = Str::uuid() . '.' . $file->getClientOriginalExtension(); 

    $filePath = $file->storeAs('uploads', $uniqueName); 

 

    return back()->with('success', 'File uploaded successfully! File path: ' . $filePath); 

} 


Assignment 7: Categorize Uploaded Files

Task:
Save files into different directories based on their type. For example, images go to an images folder, and documents go to a documents folder.

Solution:
Controller Code:

php

Copy code

public function uploadFile(Request $request) 

{ 

    $request->validate([ 

        'file' => 'required|file|mimes:jpg,png,pdf,docx|max:2048', 

    ]); 

 

    $file = $request->file('file'); 

    $fileType = $file->getClientMimeType(); 

 

    $folder = str_contains($fileType, 'image') ? 'images' : 'documents'; 

 

    $fileName = time() . '_' . $file->getClientOriginalName(); 

    $filePath = $file->storeAs($folder, $fileName); 

 

    return back()->with('success', 'File uploaded successfully to ' . $folder . ' folder!'); 

} 


Assignment 8: Track Uploaded Files in a Database

Task:
Store information about uploaded files (name, path, and upload time) in a database table.

Solution:
Database Migration:

php

Copy code

php artisan make:migration create_uploaded_files_table --create=uploaded_files 

php

Copy code

Schema::create('uploaded_files', function (Blueprint $table) { 

    $table->id(); 

    $table->string('name'); 

    $table->string('path'); 

    $table->timestamps(); 

}); 

Controller Code:

php

Copy code

use App\Models\UploadedFile; 

 

public function uploadFile(Request $request) 

{ 

    $request->validate([ 

        'file' => 'required|file|max:2048', 

    ]); 

 

    $file = $request->file('file'); 

    $fileName = time() . '_' . $file->getClientOriginalName(); 

    $filePath = $file->storeAs('uploads', $fileName); 

 

    // Save file details in the database 

    UploadedFile::create([ 

        'name' => $fileName, 

        'path' => $filePath, 

    ]); 

 

    return back()->with('success', 'File uploaded and saved to database!'); 

} 


Assignment 9: Download Uploaded Files

Task:
Provide a feature for users to download previously uploaded files by selecting them from a list.

Solution:
Controller Code:

php

Copy code

use Illuminate\Support\Facades\Storage; 

 

public function downloadFile($fileName) 

{ 

    return Storage::download('uploads/' . $fileName); 

} 

Route:

php

Copy code

Route::get('/download/{fileName}', [FileUploadController::class, 'downloadFile']); 

Blade Template:

html

Copy code

@foreach ($files as $file) 

    <p>{{ $file->name }} <a href="/download/{{ $file->name }}">Download</a></p> 

@endforeach 


Assignment 10: Delete Uploaded Files

Task:
Allow users to delete previously uploaded files from both the storage and the database.

Solution:
Controller Code:

php

Copy code

use Illuminate\Support\Facades\Storage; 

use App\Models\UploadedFile; 

 

public function deleteFile($id) 

{ 

    $file = UploadedFile::find($id); 

 

    if ($file) { 

        // Delete file from storage 

        Storage::delete($file->path); 

 

        // Delete file record from database 

        $file->delete(); 

 

        return back()->with('success', 'File deleted successfully!'); 

    } 

 

    return back()->with('error', 'File not found!'); 

} 

Route:

php

Copy code

Route::delete('/delete/{id}', [FileUploadController::class, 'deleteFile']); 

Blade Template:

html

Copy code

@foreach ($files as $file) 

    <p>{{ $file->name }} 

        <form action="/delete/{{ $file->id }}" method="POST" style="display:inline;"> 

            @csrf 

            @method('DELETE') 

            <button type="submit">Delete</button> 

        </form> 

    </p> 

@endforeach 


Assignment 11: Limit the Number of Uploads

Task:
Restrict users to upload a maximum of 5 files. If they try to upload more, show an error message.

Solution:
Controller Code:

php

Copy code

use App\Models\UploadedFile; 

 

public function uploadFile(Request $request) 

{ 

    $uploadedFileCount = UploadedFile::count(); 

 

    if ($uploadedFileCount >= 5) { 

        return back()->with('error', 'Upload limit reached. You can only upload 5 files.'); 

    } 

 

    $request->validate([ 

        'file' => 'required|file|max:2048', 

    ]); 

 

    $file = $request->file('file'); 

    $fileName = time() . '_' . $file->getClientOriginalName(); 

    $filePath = $file->storeAs('uploads', $fileName); 

 

    UploadedFile::create([ 

        'name' => $fileName, 

        'path' => $filePath, 

    ]); 

 

    return back()->with('success', 'File uploaded successfully!'); 

} 


Assignment 12: Preview Uploaded Images

Task:
For image files, display a preview of the uploaded image after a successful upload.

Solution:
Blade Template:

html

Copy code

@if (session('success')) 

    <p>{{ session('success') }}</p> 

    <img src="{{ asset('storage/uploads/' . session('fileName')) }}" alt="Uploaded Image" style="max-width: 200px;"> 

@endif 


Additional Challenges for Advanced Practice

1.  Dynamic File Paths: Create subfolders for each user based on their ID or username.

2.  Encrypt File Names: Use hash functions to encrypt file names before saving them.

3.  Chunked Uploads: Implement chunked file uploads for large files.

4.  Temporary Files: Delete uploaded files after a specified period (e.g., 24 hours).

5.  Upload Progress Bar: Add a JavaScript-based progress bar to show upload status.


 

Comments

Popular posts from this blog

MCQs Of Day CRUD 8 Operations with Eloquent

Lecture Notes Of Day 24: Laravel Policies

MCQs of Day 7 Eloquent ORM Basics