Handling file uploads and validation in Laravel is quite straightforward. Laravel provides several methods out of the box, which make it easy to handle such tasks.
Step 1: Define Route
Firstly, ensure you have a route defined for handling your file upload form submission.
Route::post('/upload', 'YourController@handleUpload');
Step 2: Create Form in View
In your view file (Blade template), create an HTML form to handle file uploads. Make sure to include the CSRF token for security and enctype="multipart/form-data"
for uploading files.
<form action="/upload" method="post" enctype="multipart/form-data">
@csrf
<input type="file" name="file" accept="image/*, .pdf,.docx,.jpg,.png">
<button type="submit">Upload</button>
</form>
Step 3: Handle Upload in Controller
Now, you need to create a method in your controller (let's say YourController
) that will handle the file upload and validation.
use Illuminate\Http\Request;
class YourController extends Controller {
public function handleUpload(Request $request) {
// Validate file upload
$validatedData = $request->validate([
'file' => 'required|file|mimes:jpeg,png,pdf,docx,jpg|max:2048', // Example validation rules
]);
if ($request->hasFile('file')) {
// Upload the file and store it in public storage folder
$path = $request->file('file')->store('uploads');
// Do something with the stored file (e.g., save the path to your database)
return "File uploaded successfully!";
} else {
return "No file was selected for upload.";
}
}
}
In this example, we validate that a file is required (required
), it's a file type (file
), its MIME types are jpeg
, png
, pdf
, docx
, or jpg
(mimes:jpeg,png,pdf,docx,jpg
), and the size doesn't exceed 2MB (max:2048
). If validation fails, Laravel will automatically redirect back with error messages.
Step 4: Store File
If the file passes validation, you can use the store()
method to save the file in the 'uploads' directory under the public storage folder. The returned value is the path where the file has been stored.
Note: Always remember to make storage folders writable by the web server. This often involves using chmod
on your terminal if you're using a Unix-based system (like Linux or MacOS). For example, sudo chmod -R 775 storage/app/public
.
Remember, this is just a basic guide. Laravel offers much more flexibility in terms of handling file uploads and validation. You can configure disk drivers for storing files, customize the path where uploaded files are saved, or even perform additional checks on the uploaded file before saving it.