📅  最后修改于: 2023-12-03 15:24:15.251000             🧑  作者: Mango
在 Laravel 项目中,有时候需要上传并保存 PDF 文件,同时需要记录一些 PDF 文件的相关信息,如文件名、路径、大小、上传时间等等。本文将介绍如何在 Laravel 项目中保存 PDF 文件的信息。
首先,需要创建一个数据库表来保存 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_at
和 updated_at
字段,用于记录 PDF 文件的创建时间和更新时间。接下来,需要创建一个路由,用于处理 PDF 文件的上传。打开 routes/web.php
文件,添加以下代码:
use App\Http\Controllers\PdfController;
use Illuminate\Support\Facades\Route;
Route::post('/pdfs', [PdfController::class, 'store']);
上述代码中,我们定义了一个 POST
请求,它的 URL 是 /pdfs
,对应的控制器是 PdfController
的 store()
方法。
接下来,需要创建 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 文件的上传和保存。它的实现过程如下:
pdf
的文件。如果没有文件,则返回错误信息;Pdf
模型实例;Pdf
模型实例中,并保存到数据库;上述代码中,Storage::disk('public')->putFile('pdfs', $file);
表示将文件保存到存储磁盘 public
的 pdfs
目录中,并生成一个随机的文件名。如果需要设置文件名,可以使用 $file->storeAs('pdfs', $name);
方法。
最后,需要创建一个路由和方法,用于显示上传的 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 文件。它的实现过程如下:
Pdf
模型实例;response()->file()
方法,将文件输出到客户端浏览器。至此,本文介绍了如何在 Laravel 项目中保存 PDF 文件的信息。具体步骤如下:
希望本文可以帮助您在 Laravel 项目中上传和保存 PDF 文件。如有任何疑问,欢迎留言讨论。