在Laravel上上传文件10
#php #laravel #package #fileupload

上传文件是大多数应用程序都使用的一个常见功能,但我看到许多人正在努力。

Laravel提供了一个简单的API,可以与本地文件系统一起使用,如:

Storage::putFileAs('images', $request->file('file'));

通常用户需要处理文件验证,文件大小 dimensions name 可见性路径 disk 等。

我们将要创建一个表格,允许我们上传文件并提交它 - 路由将接受此表单,验证输入并处理上传。

在本文中,我将使用erlandmuchasaj/laravel-file-uploader软件包在Laravel 10上进行分步文件上传教程。
在本教程中,我们将生成2条路线。
一个用于创建用户将在其中上传文件和另一个路由的表单,以便使用软件包上传文件。
我们将使用Bootstrap Form UI components创建一个简单的表单。

首先,让我们设置一个全新的Laravel项目。
打开命令行工具并执行以下命令以从头开始创建一个Laravel项目。

composer create-project laravel/laravel --prefer-dist laravel-file-uploader

然后,我们进入了新鲜创建的项目目录:

cd laravel-file-uploader

然后我们安装laravel-file-uploader软件包。

composer require erlandmuchasaj/laravel-file-uploader

之后,我们创建了一个符号链接来访问将可以公开访问的文件。
默认情况下,public磁盘使用local驱动程序并将其文件存储在storage/app/public

要使这些文件从网络访问,您应该创建一个从public/storagestorage/app/public的符号链接。

要创建符号链接,您可以使用存储:链接工匠命令:

php artisan storage:link

创建路线。

转到route/web.php并创建2个其他路线。第一个处理形式可视化,另一个处理表单后请求。

use ErlandMuchasaj\LaravelFileUploader\FileUploader; // <= import the package
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;


// visualize the form
Route::get('/files', function (Request $request) {
    return view('files');
})->name('files');

// handle the post request
Route::post('/files', function (Request $request) {

    $max_size = (int) ini_get('upload_max_filesize') * 1000;

    $extensions = implode(',', FileUploader::images());

    $request->validate([
        'file' => [
            'required',
            'file',
            'image',
            'mimes:' . $extensions,
            'max:'.$max_size,
        ]
    ]);

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

    $response = FileUploader::store($file);

    return redirect()
            ->back()
            ->with('success','File has been uploaded.')
            ->with('file', $response);
})->name('files.store');

在Laravel中创建刀片文件。

在此步骤中,我们创建了将放置文件上传器表单的视图。
resources/views/files.blade.php中创建一个新文件,然后放置以下内容:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>File uploader</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
    </head>
    <body class="antialiased">
        <div class="container">
            <div class="row">
                <div class="col-12">
                    @if ($message = Session::get('success'))
                        <div class="alert alert-success alert-dismissible fade show" role="alert">
                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                            <strong>{{ $message }}</strong>
                        </div>
                    @endif
                    @if (count($errors) > 0)
                        <div class="alert alert-danger alert-dismissible fade show" role="alert">
                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                            <ul class="mb-0 p-0">
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif
                </div>
                <div class="col-12 py-5">
                    <div class="card my-5">
                        <div class="card-header">
                           <h3>Laravel File Uploader</h3>
                        </div>
                        <div class="card-body">
                            <form method="POST" action="{{ route('files.store')  }}" enctype="multipart/form-data">
                                @method('POST')
                                @csrf
                                <div class="mb-3">
                                    <label for="formFileLg" class="form-label">File input example</label>
                                    <input name="file" class="form-control form-control-lg" id="formFileLg"
                                           type="file">
                                </div>
                                <div class="mb-3">
                                    <button type="submit" value="submit" class="btn btn-primary">Upload</button>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
    </body>
</html>

这将向用户显示表单上传文件。此视图模板中的表单指向我们在routes/web.php文件之前创建的名为files.store的路由。

Laravel upload form

这是本教程的。

如果您需要有关所使用的软件包的更多信息,则可以在下面阅读更多:

GitHub logo erlandmuchasaj / laravel-file-uploader

一个简单但功能强大的Laravel文件上传器包

Laravel File Uploader

Laravel File Uploader offers an easy way to upload files to different disks The main purpose of the package is to remove the repeated and cumbersome code and simplify it into some simple methods.

Installation

You can install the package via composer:

composer require erlandmuchasaj/laravel-file-uploader

Usage

This package has an very easy and straight-forward usage Just import the package and pass the file as parameter, and it will handle the rest.

use ErlandMuchasaj\LaravelFileUploader\FileUploader
Route::post('/files', function (\Illuminate\Http\Request $request) {

    $max_size = (int) ini_get('upload_max_filesize') * 1000;
    
    // FileUploader::images() get all image extensions ex: jpg, png, jpeg, gif, etc.
    // FileUploader::documents() get all documents extensions ex: 'csv', 'html', 'pdf', 'doc', 'docx', 'ppt' etc.
    $extensions = implode(',', FileUploader::images());

    $request->

有帮助吗?

如果您在任何项目中使用此软件包,请在下面的评论部分告诉我。

不要忘记喜欢注释

关注me获取更多Web开发技巧,新软件包等。

感谢您的阅读。