📜  如何在 laravel 项目中保存 pdf 文件的信息 - PHP (1)

📅  最后修改于: 2023-12-03 15:24:15.251000             🧑  作者: Mango

如何在 Laravel 项目中保存 PDF 文件的信息

在 Laravel 项目中,有时候需要上传并保存 PDF 文件,同时需要记录一些 PDF 文件的相关信息,如文件名、路径、大小、上传时间等等。本文将介绍如何在 Laravel 项目中保存 PDF 文件的信息。

1. 创建数据库表

首先,需要创建一个数据库表来保存 PDF 文件的信息。可以使用 Laravel 的迁移功能来创建该表。打开命令行工具,进入项目根目录,执行以下命令:

php artisan make:migration create_pdfs_table --create=pdfs

上述代码中,create_pdfs_table 是迁移文件的名称,--create=pdfs 表示创建 pdfs 表。执行上述命令后,Laravel 会为您创建一个迁移文件,它位于 database/migrations 目录下。

在迁移文件中,定义表的结构。以下是一个示例:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePdfsTable extends Migration
{
    public function up()
    {
        Schema::create('pdfs', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('path');
            $table->integer('size');
            $table->timestamp('uploaded_at');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('pdfs');
    }
}

上述代码中,我们定义了一个名为 pdfs 的表,该表包括以下字段:

  • id:唯一标识 PDF 文件的主键;
  • name:PDF 文件的名称;
  • path:PDF 文件在服务器中的存储路径;
  • size:PDF 文件的大小;
  • uploaded_at:PDF 文件上传的时间;
  • timestamps():自动维护 created_atupdated_at 字段,用于记录 PDF 文件的创建时间和更新时间。
2. 创建路由

接下来,需要创建一个路由,用于处理 PDF 文件的上传。打开 routes/web.php 文件,添加以下代码:

use App\Http\Controllers\PdfController;
use Illuminate\Support\Facades\Route;

Route::post('/pdfs', [PdfController::class, 'store']);

上述代码中,我们定义了一个 POST 请求,它的 URL 是 /pdfs,对应的控制器是 PdfControllerstore() 方法。

3. 创建控制器

接下来,需要创建 PdfController 控制器,用于处理 PDF 文件的上传和保存。打开命令行工具,进入项目根目录,执行以下命令:

php artisan make:controller PdfController

上述代码中,PdfController 是控制器的名称。执行上述命令后,Laravel 会为您创建一个控制器文件,它位于 app/Http/Controllers 目录下。

打开 PdfController 文件,添加以下代码:

namespace App\Http\Controllers;

use App\Models\Pdf;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class PdfController extends Controller
{
    public function store(Request $request)
    {
        if ($request->hasFile('pdf')) {
            $file = $request->file('pdf');
            $name = $file->getClientOriginalName();
            $path = $file->store('pdfs');
            $size = $file->getSize();

            $pdf = new Pdf();
            $pdf->name = $name;
            $pdf->path = $path;
            $pdf->size = $size;
            $pdf->uploaded_at = now();
            $pdf->save();

            return redirect()->back()->with('success', 'PDF 文件上传成功!');
        }

        return redirect()->back()->with('error', '上传文件不能为空!');
    }
}

上述代码中,store() 方法用于处理 PDF 文件的上传和保存。它的实现过程如下:

  1. 首先,判断请求中是否包含名为 pdf 的文件。如果没有文件,则返回错误信息;
  2. 如果有文件,获取文件的名称、存储路径、大小,并创建一个 Pdf 模型实例;
  3. 将获取到的值分别设置到 Pdf 模型实例中,并保存到数据库;
  4. 返回上传成功的提示信息。

上述代码中,Storage::disk('public')->putFile('pdfs', $file); 表示将文件保存到存储磁盘 publicpdfs 目录中,并生成一个随机的文件名。如果需要设置文件名,可以使用 $file->storeAs('pdfs', $name); 方法。

4. 显示 PDF 文件

最后,需要创建一个路由和方法,用于显示上传的 PDF 文件。打开 PdfController 文件,添加以下方法:

public function show($id)
{
    $pdf = Pdf::findOrFail($id);
    $url = Storage::disk('public')->url($pdf->path);

    return response()->file($url);
}

上述代码中,show($id) 方法用于显示指定 ID 的 PDF 文件。它的实现过程如下:

  1. 首先,根据指定的 ID 获取对应的 Pdf 模型实例;
  2. 获取 PDF 文件在服务器中的存储路径,并将路径转换为公开 URL;
  3. 通过 response()->file() 方法,将文件输出到客户端浏览器。
5. 总结

至此,本文介绍了如何在 Laravel 项目中保存 PDF 文件的信息。具体步骤如下:

  1. 创建数据库表,用于保存 PDF 文件的信息;
  2. 创建一个路由,用于处理 PDF 文件的上传;
  3. 创建控制器,用于处理 PDF 文件的上传和保存;
  4. 创建一个路由和方法,用于显示上传的 PDF 文件。

希望本文可以帮助您在 Laravel 项目中上传和保存 PDF 文件。如有任何疑问,欢迎留言讨论。