thinkphp5加layui实现图片上传功能「带图片预览」

1. 介绍

本文将介绍如何使用ThinkPHP 5和Layui框架来实现一个带图片预览的图片上传功能。图片上传是 Web 开发中常见的功能之一,通过本文的学习,你将能够掌握如何在你的网站中实现这个功能。

2. 前提条件

在开始本教程之前,你应该已经具备以下环境和知识:

已安装 PHP 和 MySQL

已安装 Composer

熟悉 PHP 和 MySQL 基础知识

熟悉 ThinkPHP 5 和 Layui

3. ThinkPHP 5 配置

首先,我们需要配置 ThinkPHP 5 的相关配置文件,以便能够正确地使用图片上传功能。主要包括以下几个步骤:

3.1. 配置数据库连接

打开 `config/database.php` 文件,将其中的数据库连接配置修改为你自己的数据库信息:

return [

'type' => 'mysql',

'hostname' => 'localhost',

'database' => 'your_database_name',

'username' => 'your_username',

'password' => 'your_password',

];

3.2. 配置图片上传路径

在 `public` 目录下创建一个 `uploads` 目录,用于存储上传的图片文件。然后打开 `config/app.php` 文件,将其中的 `url_route_on` 参数设置为 `true`,并添加以下配置项:

return [

'url_route_on' => true,

'upload_path' => 'uploads/',

];

3.3. 创建数据库表

创建一个名为 `images` 的数据表,用于存储图片的相关信息。数据库表结构如下:

CREATE TABLE `images` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`path` varchar(255) NOT NULL,

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4. Layui 文件上传组件

Layui 是一款基于原生 JavaScript 的前端 UI 库,我们将使用其文件上传组件来实现图片上传的功能。首先,确保你已经引入了 Layui 的相关文件。然后,在 HTML 页面中添加以下代码:

<input type="file" name="file" id="upload" multiple>

<img id="preview" src="" style="max-width: 200px; display: none;">

接着,我们需要编写 JavaScript 代码来实现图片预览和上传功能:

layui.use(['upload'], function(){

var upload = layui.upload;

upload.render({

elem: '#upload',

url: '/upload',

before: function(obj){

obj.preview(function(index, file, result){

$('#preview').attr('src', result);

$('#preview').show();

});

},

done: function(res){

if (res.code === 0) {

var imagePath = res.data.path;

$('input[name=path]').val(imagePath);

// 其他逻辑处理

} else {

layer.msg(res.msg, {icon: 2});

}

}

});

});

在上传文件之前,我们通过 `preview` 方法来预览图片,并在上传成功后将图片路径存储到隐藏的表单项中,以便在提交表单时能够获取到图片的路径信息。

5. 图片上传处理

接下来,我们需要创建一个用于处理图片上传的控制器和路由。首先,创建一个名为 `Upload` 的控制器,并添加一个名为 `index` 的方法:

namespace app\admin\controller;

use think\Controller;

use think\Request;

use think\facade\Filesystem;

class Upload extends Controller

{

public function index(Request $request)

{

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

// 图片上传逻辑,可使用 thinkphp 提供的方法来实现

$imagePath = '/uploads/' . $fileName;

return json([

'code' => 0,

'data' => ['path' => $imagePath],

]);

}

}

在以上代码中,请确保你已经实现了图片上传的逻辑,这里的示例代码仅供参考。上传成功后,我们返回一个 JSON 响应,其中包含了图片的路径信息。

接着,在 `route/route.php` 文件中添加以下路由配置:

Route::post('upload', 'admin/upload/index');

这样,当我们使用 Layui 文件上传组件上传图片时,将会发送 POST 请求到 `/upload` 路由,然后交由 `Upload` 控制器的 `index` 方法来处理。

6. 图片预览与提交

最后,我们需要编写 HTML 表单和 JavaScript 代码来提交图片预览和其他字段信息到后台。以下是示例代码:

<form action="" method="post">

<input type="hidden" name="path" value="">

<button type="submit" class="layui-btn">提交</button>

</form>

<script>

layui.use(['form'], function(){

var form = layui.form;

form.on('submit', function(data){

// 表单提交逻辑,可使用 ajax 来提交数据到后台处理

return false;

});

});

</script>

在以上代码中,我们创建了一个表单,并使用隐藏的表单项来存储图片路径。当点击表单中的提交按钮时,通过 JavaScript 代码来处理表单提交逻辑,可以使用 AJAX 来将数据发送到后台进行处理。

7. 结论

通过本文的学习,你应该已经掌握了使用 ThinkPHP 5 和 Layui 来实现图片上传功能的方法。通过配置环境、使用 Layui 的文件上传组件、处理上传文件、预览和提交表单等步骤,你可以在自己的网站中轻松地实现这个功能。希望本文对你有所帮助!

后端开发标签