Полное руководство по загрузке нескольких файлов в Laravel 9

В этом руководстве мы рассмотрим различные методы реализации загрузки нескольких файлов в Laravel 9. Загрузка нескольких файлов — обычное требование в веб-приложениях, и Laravel предлагает несколько подходов для эффективного решения этой задачи. Мы рассмотрим несколько методов вместе с примерами кода, чтобы продемонстрировать их реализацию.

  1. Использование обработки запросов по умолчанию в Laravel.
    Обработка запросов по умолчанию в Laravel позволяет легко обрабатывать загрузку файлов. Чтобы реализовать загрузку нескольких файлов с помощью этого метода, выполните следующие действия:
// Controller
public function uploadFiles(Request $request)
{
    if ($request->hasFile('files')) {
        $files = $request->file('files');
        foreach ($files as $file) {
            $file->store('public/uploads');
        }
    }
    return "Files uploaded successfully!";
}
<!-- View -->
<form action="/upload" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="files[]" multiple>
    <button type="submit">Upload</button>
</form>
  1. Использование пакета изображений вмешательства:
    Пакет изображений вмешательства обеспечивает простой способ обработки загрузки изображений и манипуляций с ними. Чтобы использовать этот пакет для загрузки нескольких файлов, выполните следующие действия:
// Controller
use Intervention\Image\Facades\Image;
public function uploadFiles(Request $request)
{
    if ($request->hasFile('files')) {
        $files = $request->file('files');
        foreach ($files as $file) {
            $filename = $file->getClientOriginalName();
            $path = 'public/uploads/' . $filename;
            Image::make($file)->save($path);
        }
    }
    return "Files uploaded successfully!";
}
<!-- View -->
<form action="/upload" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="files[]" multiple>
    <button type="submit">Upload</button>
</form>
  1. Использование пакета медиа-библиотеки Spatie:
    Пакет медиа-библиотеки Spatie предоставляет мощный способ управления медиа-файлами в приложениях Laravel. Чтобы обрабатывать несколько загрузок файлов с помощью этого пакета, выполните следующие действия:
// Controller
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class MyModel implements HasMedia
{
    use InteractsWithMedia;
    public function uploadFiles(Request $request)
    {
        if ($request->hasFile('files')) {
            $files = $request->file('files');
            foreach ($files as $file) {
                $this->addMedia($file)->toMediaCollection('files');
            }
        }
        return "Files uploaded successfully!";
    }
}
<!-- View -->
<form action="/upload" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="files[]" multiple>
    <button type="submit">Upload</button>
</form>
  1. Использование библиотеки Dropzone.js.
    Dropzone.js — это популярная библиотека JavaScript для загрузки файлов методом перетаскивания. Чтобы использовать Dropzone.js для загрузки нескольких файлов в Laravel, выполните следующие действия:
<!-- View -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/dropzone.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script>
<form action="/upload" method="POST" class="dropzone">
    @csrf
    <div class="fallback">
        <input type="file" name="file" multiple>
    </div>
</form>
<!-- JavaScript -->
<script>
    Dropzone.options.myDropzone = {
        paramName: "files", // The name that will be used to transfer the file
        maxFilesize: 2, // MB
        addRemoveLinks: true,
        success: function (file, response) {
            console.log("File uploaded successfully!");
        }
    };
</script>

В этом руководстве мы рассмотрели несколько методов реализации загрузки нескольких файлов в Laravel 9. Мы рассмотрели обработку запросов по умолчанию в Laravel, пакет Intervention Image, пакет медиа-библиотеки Spatie и библиотеку Dropzone.js. Вы можете выбрать метод, который лучше всего соответствует требованиям вашего проекта, и интегрировать его в свое приложение Laravel.