如下layui+php后台用于上传多文件,有前后台如下。文件上传至服务器的myfile文件夹,同时文件名和文件地址写入mysql的表table1,如文件 姓名.pdf 上传到mysql,file_name:姓名,file_address:.\myfile\姓名.pdf
mysql table:
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
file_name VARCHAR(50) NOT NULL,
date DATE,
file_address VARCHAR(255) NOT NULL UNIQUE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>test</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" href="./css/font.css">
<link rel="stylesheet" href="./css/xadmin.css">
<script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="./js/xadmin.js"></script>
<script type="text/javascript" src="./js/jquery-2.1.1.min.js"></script>
<style>
.selectUp .layui-form-select dl{
top: auto;
bottom: 36px;
}
</style>
</head>
<body>
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal" id="testList">选择多文件</button>
<div class="layui-upload-list" style="max-width: 1000px;">
<table class="layui-table">
<colgroup>
<col>
<col width="150">
<col width="260">
<col width="150">
</colgroup>
<thead>
<th>文件名</th>
<th>大小</th>
<th>上传进度</th>
<th>操作</th>
</thead>
<tbody id="demoList"></tbody>
</table>
</div>
<button type="button" class="layui-btn" id="testListAction">开始上传</button>
</div>
<script>
layui.use(['upload', 'element', 'layer'], function () {
var $ = layui.jquery
, upload = layui.upload
, element = layui.element
, layer = layui.layer;
//演示多文件列表
var uploadListIns = upload.render({
elem: '#testList'
, elemList: $('#demoList') //列表元素对象
, url: 'upload_do.php'
, accept: 'file'
, multiple: true
, number: 10
, auto: false
, bindAction: '#testListAction'
, choose: function (obj) {
var that = this;
var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
//读取本地文件
obj.preview(function (index, file, result) {
var tr = $(['<tr id="upload-' + index + '">'
, '<td>' + file.name + '</td>'
, '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
, '<td><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
, '<td>'
, '<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
, '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
, '</td>'
, '</tr>'].join(''));
//单个重传
tr.find('.demo-reload').on('click', function () {
obj.upload(index, file);
});
//删除
tr.find('.demo-delete').on('click', function () {
delete files[index]; //删除对应的文件
tr.remove();
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
});
that.elemList.append(tr);
element.render('progress'); //渲染新加的进度条组件
});
}
, done: function (res, index, upload) { //成功的回调
var that = this;
console.log(res);
if (res.code == 0) { //上传成功
var tr = that.elemList.find('tr#upload-' + index), tds = tr.children();
tds.eq(3).html(''); //清空操作
delete this.files[index]; //删除文件队列已经上传成功的文件
return;
}
this.error(index, upload);
}
, allDone: function (obj) { //多文件上传完毕后的状态回调
var json = JSON.stringify(obj);
console.log(json);
}
, error: function (index, upload) { //错误回调
var that = this;
var tr = that.elemList.find('tr#upload-' + index)
, tds = tr.children();
tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
}
, progress: function (n, elem, e, index) {
element.progress('progress-demo-' + index, n + '%'); //执行进度条。n 即为返回的进度百分比
}
});
});
</script>
</body>
</html>
upload_do.php
<?php
$dir = "uploadFile/";
//初始化返回数组
$arr = array(
'code' => 0,
'msg' => '',
'data' => array(
'src' => $dir . $_FILES["file"]["name"]
),
);
$file_info = $_FILES['file'];
$file_error = $file_info['error'];
$file = $dir . $_FILES["file"]["name"];
if (!file_exists($file)) {
if ($file_error == 0) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $dir . $_FILES["file"]["name"])) {
$arr['msg'] = "上传成功";
} else {
$arr['msg'] = "上传失败";
}
} else {
switch ($file_error) {
case 1:
$arr['msg'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
break;
case 2:
$arr['msg'] = '超过了表单max_file_size限制的大小';
break;
case 3:
$arr['msg'] = '文件部分被上传';
break;
case 4:
$arr['msg'] = '没有选择上传文件';
break;
case 6:
$arr['msg'] = '没有找到临时文件';
break;
case 7:
case 8:
$arr['msg'] = '系统错误';
break;
}
}
} else {
$arr['code'] = "1";
$arr['msg'] = "当前目录中,文件" . $file . "已存在";
}
$res = json_encode($arr);
die($res);
【以下回答由 GPT 生成】
这个问题旨在实现使用layui和php后台实现文件上传,并将文件路径保存在MySQL的table1表中。
一般实现文件上传的方式是通过前端的文件上传组件将文件传输到后台,后台再处理文件上传并保存文件路径到数据库。
在前端的HTML代码中,使用layui的上传组件实现文件上传功能。具体可以按照以下步骤进行:
<head>
标签中引入layui库和样式文件:<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui@2.5.6/dist/css/layui.css">
<script src="https://cdn.jsdelivr.net/npm/layui@2.5.6/dist/layui.js"></script>
<body>
标签中添加文件上传的HTML代码:<div class="layui-upload">
<button type="button" class="layui-btn" id="upload">上传文件</button>
<p id="fileUrl"></p>
</div>
<script>
标签中初始化layui并添加上传事件:<script>
layui.use('upload', function() {
var upload = layui.upload;
//执行实例
var uploadInst = upload.render({
elem: '#upload', //绑定元素
url: 'upload.php', //上传接口
done: function(res) { //上传成功回调
console.log(res);
if (res.code === 0) {
//上传成功后将文件路径写入文本框
$('#fileUrl').text('文件路径:' + res.data.url);
} else {
layer.msg(res.msg);
}
},
error: function() { //请求异常回调
layer.msg('上传失败');
}
});
});
</script>
在后台使用PHP处理文件上传和保存路径到数据库。具体可以按照以下步骤进行:
创建一个PHP文件,比如upload.php
。
在upload.php
文件中,首先检查文件是否成功上传,并确定文件上传路径:
<?php
$file = $_FILES['file']; // 获取上传的文件信息
if ($file['error'] > 0) {
$result = array('code' => 1, 'msg' => '文件上传失败');
echo json_encode($result);
exit;
}
$uploadDir = 'uploads/'; // 文件上传目录
if (!file_exists($uploadDir)) {
mkdir($uploadDir, 0777, true); // 如果目录不存在,则创建目录
}
$filename = date('YmdHis') . '_' . rand(1000, 9999) . '_' . $file['name'];
$filePath = $uploadDir . $filename; // 文件保存路径
if (move_uploaded_file($file['tmp_name'], $filePath)) {
// 文件移动成功
// 这里可以根据需要处理保存到数据库的其他信息,比如文件名、日期等
// 保存文件路径到数据库
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 准备SQL语句
$sql = "INSERT INTO table1 (file_name, date, file_address) VALUES ('" . $file['name'] . "', NOW(), '" . $filePath . "')";
// 执行SQL语句
if ($conn->query($sql) === TRUE) {
// 数据库操作成功
$result = array('code' => 0, 'msg' => '文件上传成功', 'data' => array('url' => $filePath));
echo json_encode($result);
} else {
// 数据库操作失败
$result = array('code' => 1, 'msg' => '文件上传成功,但写入数据库失败');
echo json_encode($result);
}
// 关闭连接
$conn->close();
} else {
// 文件移动失败
$result = array('code' => 1, 'msg' => '文件上传失败,文件移动失败');
echo json_encode($result);
}
需要根据自己的MySQL数据库配置,修改upload.php
中的数据库相关配置,包括$servername
、$username
、$password
、$dbname
。
完成上述步骤后,即可实现使用layui和php后台实现文件上传,并将文件路径保存在MySQL的table1表中的功能。
请注意,由于涉及到文件上传和数据库操作,代码中可能需要根据实际情况进行适当的安全防护和错误处理。