📜  laravel 上传图片 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:46.207000             🧑  作者: Mango

Laravel 上传图片 - PHP

在进行Web应用程序的开发中,文件上传功能是非常常见的需求。由于Laravel框架已经内置了全套的文件上传功能,开发者可以轻松地实现文件上传功能并处理上传后的文件。本文将介绍如何在Laravel框架中实现图片上传功能。

准备工作

在开始实现图片上传功能之前,我们需要进行一些准备工作。

环境要求
  • PHP 7.0.0 或更高版本
  • Laravel 5.5 或更高版本
安装依赖

在Laravel框架中实现图片上传功能需要依赖以下库:

  • symfony/http-foundation:封装了 HTTP 请求和响应,使操作变得简单。
  • intervention/image:处理图片文件的库。

composer.json 文件中添加以下依赖:

{
    "require": {
        "symfony/http-foundation": "^4.0",
        "intervention/image": "^2.5"
    }
}

执行以下命令安装依赖:

composer install
配置文件

默认情况下,Laravel框架已经配置好了上传文件的相关信息。我们可以编辑 config/filesystems.php 文件,修改Laravel默认的文件存储路径:

'disks' => [

    // ...

    'public' => [
        'driver' => 'local',
        'root' => public_path('uploads'), // 修改为存储路径
        'url' => env('APP_URL').'/uploads',
        'visibility' => 'public',
    ],

    // ...

],
实现图片上传功能

我们可以通过Laravel框架提供的文件上传功能,轻松地实现图片上传功能。

实现步骤
  1. 创建路由

routes/web.php 文件中添加以下代码:

Route::get('upload', function () {
    return view('upload');
});

Route::post('upload', function (\Illuminate\Http\Request $request) {
    $file = $request->file('image');
    $fileName = $file->hashName();
    $path = $file->store('public/images');
    return $path;
});

其中,upload 路由用于展示上传页面;upload POST请求用于上传图片。

  1. 创建视图

resources/views 目录下创建 upload.blade.php 文件:

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 上传图片</title>
</head>
<body>
    <h1>Laravel 上传图片</h1>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        {{ csrf_field() }}
        <input type="file" name="image">
        <br><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
  1. 文件上传

使用浏览器打开 http://localhost:8000/upload,上传一张图片。

解释说明

在上述代码片段中,我们通过 file 函数获取上传的图片,使用 hashName 函数生成唯一的文件名,并使用 store 函数将图片保存到指定的保存路径中。保存完成后,我们可以获得上传图片的存储路径。

使用Intervention库处理图片

Laravel框架默认使用 GD2Imagick 这两个扩展来处理图片,但是它们的接口缺乏友好性,所以我们需要第三方库来辅助完成处理图片的需求。

Intervention库是一个广泛使用的图片处理库,它为我们提供了许多有用的接口和方法。下面,我们将使用Intervention库来处理上传的图片。

实现步骤
  1. 安装Intervention库

已在第一步中安装依赖中集成,因此无需额外安装。

  1. 创建路由

routes/web.php 文件中添加以下代码:

Route::post('upload', function (\Illuminate\Http\Request $request) {
    $file = $request->file('image');
    $fileName = $file->hashName();
    $path = $file->store('public/images');
    $img = \Intervention\Image\Facades\Image::make(public_path($path));
    return $img->response();
});

其中,我们使用了 Intervention/Image 库中的 Image 类,将图片文件读取到内存中,使用 response 函数输出处理后的图片。这里,我们简单地将图片镜像处理,并直接输出。

  1. 文件上传

使用浏览器打开 http://localhost:8000/upload,上传一张图片。上传成功后,我们可以在浏览器中看到处理后的图片。

解释说明

在上述代码片段中,我们首先使用 Image::make 函数将图片读取到内存中,并使用 response 函数输出处理后的图片。在中间的 make 函数中,我们指定图片的路径,使 Image 类能够正确获取到图片。在 response 函数中,我们将处理后的图片直接输出。

结语

到此,我们已经学会如何在Laravel框架中实现图片上传功能,并使用Intervention库对上传的图片进行处理。此外,有了Laravel框架和Intervention库的支持,我们可以很轻松地实现各种类型的文件上传和处理功能。