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
Post a Comment