1. 简介
Layui是一款国产的前端组件化与模块化开发框架,它强调简洁、易用和内置大量组件,比如表单、表格、弹窗、树形结构、日期和分页等等。在实际应用中,我们常常需要上传图片,本文将介绍如何使用 layui 实现图片上传的功能。
2. 下载 Layui
首先,我们需要下载 Layui 的代码库,可以从官网 https://www.layui.com/ 获取最新版本的下载链接,并将其解压到项目目录中。
// 下载 layui 源码
wget https://cdn.bootcdn.net/ajax/libs/layui/2.6.8/layui-src.zip
// 解压到项目目录中
unzip layui-src.zip -d ./public/layui/
3. 引入 layui 模块
在 HTML 页面中引入 layui 的相关模块,这里我们需要使用 layui 的 upload 和 layer 模块,upload 模块用于实现图片上传的具体功能,layer 模块则用于实现弹窗效果。
// 引入 layui 的 css 文件
<link rel="stylesheet" href="./public/layui/css/layui.css">
// 引入 layui 的 js 文件
<script type="text/javascript" src="./public/layui/layui.js"></script>
// 引入 jquery 库
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
// 使用 upload 和 layer 模块
<script>
layui.use(['upload', 'layer'], function() {
var upload = layui.upload,
layer = layui.layer;
// 具体代码实现
});
</script>
4. 图片上传功能实现
4.1 HTML 代码结构
首先,我们需要在 HTML 页面中定义一个用于上传图片的区域,并预留一个用于展示已上传图片的区域。
<div class="layui-upload">
<button type="button" class="layui-btn" id="uploadBtn">上传图片</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="showImg">
<p id="imgUrl">
</div>
</div>
其中,id 为 uploadBtn 的按钮用于触发图片上传功能,id 为 showImg 的 img 标签则用于展示已上传的图片,id 为 imgUrl 的 p 标签则用于展示上传图片的 URL 地址。
4.2 图片上传事件绑定
接着,我们需要在代码中绑定图片上传事件。使用 layui.upload 模块中的 render 函数,我们可以实现图片上传按钮的事件绑定、文件选择、上传进度等等功能。
// 实现图片上传
upload.render({
elem: '#uploadBtn',
url: 'http://localhost:3000/upload',
accept: 'images',
done: function(res) {
console.log(res);
// 上传成功后,将图片展示出来,展示图片的 img 标签 id 为 showImg
$("#showImg").attr("src", res.data);
$("#imgUrl").html(res.data);
},
error: function(res) {
console.log(res);
layer.msg("上传失败");
}
});
其中,我们需要指定 elem 为绑定上传事件的按钮的 ID,url 为图片上传地址,done 为上传成功的回调函数,error 为上传失败的回调函数。
5. 后端代码
因为不同的开发语言上传图片的方式不同,本文中只提供 Node.js 的后台代码示例。
5.1 安装相关依赖
我们使用 Express 框架来实现 Node.js 后端开发。打开项目终端,可以使用以下命令安装 Express 相关依赖:
npm init -y
npm install express --save
npm install multer --save
其中,multer 是一个基于 Express 的文件上传中间件,我们通过安装它来方便地处理 HTTP 请求中的文件上传部分。
5.2 编写后端上传图片接口
在 Express 中,我们通过定义路由实现不同的请求对应不同的处理逻辑。在本文中,我们定义一个 POST 请求的路由 '/upload',并处理图片上传的请求,具体实现如下:
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
app.use(express.static(path.join(__dirname, 'public')));
// 通过 Multer 中间件实现图片上传
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, './public/uploads');
},
filename: function(req, file, cb) {
cb(null, Date.now() + '-' + file.originalname)
}
});
const upload = multer({ storage: storage });
// 定义 POST 路由 '/upload',使用上传中间件 upload.single('file')
app.post('/upload', upload.single('file'), function(req, res) {
console.log(req.file);
const imgUrl = 'http://localhost:3000/uploads/' + req.file.filename; // 返回图片 URL 地址到客户端
res.json({ code: 0, msg: '上传成功', data: imgUrl });
});
app.listen(3000, function() {
console.log('Server running at http://localhost:3000');
});
在这段代码中,我们通过 Multer 中间件实现图片上传的功能。具体来说,我们通过定义一个磁盘存储引擎(diskStorage),在定义的目录下保存上传文件,然后将上传文件的 URL 地址返回到客户端。
6. 效果展示
完成上述前后端代码编写后,启动前端项目和 Node.js 后端项目,并在浏览器中访问前端页面,即可进行图片上传功能的测试。效果如下图所示:
7. 总结
本文介绍了在使用 Layui 框架中,如何实现图片上传的功能,并提供了相应的代码示例,读者可以根据实际需要在自己的项目中进行使用。