在本主题中, 我们将了解如何上传文件。
让我们通过一个例子来理解。
- 首先, 我们使用以下命令在laravel 5.8中创建项目:

文章图片
- 现在, 我们创建一个名为“ Form”的模型。

文章图片
- 打开迁移文件(create_forms_table)。
<
?phpuse Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFormsTable extends Migration{/*** Run the migrations.** @return void*/public function up(){Schema::create('forms', function (Blueprint $table) {$table->
bigIncrements('id');
$table->
string('path');
$table->
timestamps();
});
}/*** Reverse the migrations.** @return void*/public function down(){Schema::dropIfExists('forms');
}}
上面的代码创建了一个名为“ forms”的表, 该表包含四列(id, path, created_at, updated_at)。
- 使用以下命令迁移数据库中的以上更改:

文章图片
- 我们创建一个名为“ FormController”的控制器。

文章图片
- 现在, 我们创建一个名为form.blade.php的视图页面。
<
Html>
<
Head>
<
title>
File Upload <
/title>
<
/Head>
<
Body>
<
form method="Post" action="{{route('forms.store')}}" enctype="multipart/form-data">
@csrf<
div>
<
input type="file" name="image">
<
/div>
<
br/>
<
div>
<
button type="submit">
Upload <
/button>
<
/div>
<
/form>
<
/body>
将文件存储在数据库中
在此, 我们将定义store()函数, 在其中添加将文件保存在数据库中的代码。
FormController.php
<
?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Form;
class FormController extends Controller{/*** Display a listing of the resource.** @return \Illuminate\Http\Response*/public function index(){//}/*** Show the form for creating a new resource.** @return \Illuminate\Http\Response*/public function create(){//}/*** Store a newly created resource in storage.** @param\Illuminate\Http\Request$request* @return \Illuminate\Http\Response*/public function store(Request $request){//$data=http://www.srcmini.com/new Form;
if($files=$request->
file('image')){$name=$files->
getClientOriginalName();
$files->
move('images', $name);
$data->
path=$name;
}$data->
save();
} /*** Display the specified resource.** @paramint$id* @return \Illuminate\Http\Response*/public function show($id){//}/*** Show the form for editing the specified resource.** @paramint$id* @return \Illuminate\Http\Response*/public function edit($id){//}/*** Update the specified resource in storage.** @param\Illuminate\Http\Request$request* @paramint$id* @return \Illuminate\Http\Response*/public function update(Request $request, $id){//}/*** Remove the specified resource from storage.** @paramint$id* @return \Illuminate\Http\Response*/public function destroy($id){//}}
在上面的代码中, 我们定义了store()函数, 将文件存储在$ name变量中, 然后将文件移动到images文件夹。通过使用语句$ data-> save(), 将已移至图像文件夹的文件保存在数据库中。
- 现在, 我们定义一条路线。
Route::get('/file-upload', function () {return view('form');
});
输出量

文章图片
当单击“选择文件”按钮时, 我们需要选择要上传的文件。假设我选择了以下屏幕快照中所示的名为“ img.png”的文件:

文章图片
在上面的屏幕截图中, 我选择了文件(img.png), 然后单击“上传”按钮。单击“上传”按钮后, 文件将保存到数据库, 如以下屏幕快照所示:

文章图片
从数据库中检索数据 在本节中, 我们将看到如何从数据库中检索数据。
- 首先, 我们将在FormController类中定义index()函数。
public function index(){$cruds = Crud::all();
return view('index', compact('cruds'));
}
- 在此步骤中, 我们添加< img> 标记。
@extends('layout.master')@section('content')@foreach($forms as $form)<
div>
<
img src="http://www.srcmini.com/images/{{ $form->
path}}">
<
/div>
@endforeach
在上面的代码中, “ ./ images / {{$ form-> path}}”定义了图像的路径, 即图像存储在images文件夹中。
- 现在, 我们将定义显示图像的路线。
输出量

文章图片

文章图片
在上述情况下, 我们通过将路径传递给src属性来使用静态方式来显示图像。我们还可以显示图像而无需在< img> 标记中传递文件夹的名称(图像), 这可以通过在Form模型中定义getPathAttribute()函数来实现。
Form.php
<
?phpnamespace App;
use Illuminate\Database\Eloquent\Model;
class Form extends Model{//public $directory="./images/";
protected $table='forms';
public function getPathAttribute($value){return $this->
directory.$value;
}}
index.blade.php
@extends('layout.master')@section('content')@foreach($forms as $form)<
div>
<
img src="http://img.readke.com/220429/123QU458-10.jpg $form->
path}}">
<
/div>
@endforeach
【Laravel文件上传】输出量

文章图片
推荐阅读
- Laravel表单
- Laravel CRUD操作全解
- Laravel数据库
- Laravel Blade模板
- 什么是控制器()
- Laravel控制器中间件
- Laravel Composer安装详细教程
- 创建第一个Laravel项目详细步骤
- Laravel基本路由