我们使用ThinkPHP6框架经常需要文件上传,以下是封装的单文件上传控制器,结合layui前端框架,实现上传,只需调用该方法,传递存储文件夹名,为何要传递文件夹名呢?实则是为了方便管理文件。1、后端控制器代码:2、
我们使用ThinkPHP6框架经常需要文件上传,以下是封装的单文件上传控制器,结合layui前端框架,实现上传,只需调用该方法,传递存储文件夹名,为何要传递文件夹名呢?实则是为了方便管理文件。
1、后端控制器代码:
<?php
/**
*公共文件上传
* User: Hm
* Date: 2020/9/16
* Email: <2938039696@qq.com>
**/
declare (strict_types = 1);
namespace app\union\controller;
use think\exception\ValidateException;
class Upload extends Base
{
/*
* 单文件上传
* */
public function uploadImg(){
//判断是否是POST请求,如果是处理上传逻辑
if (request()->isPost()){
//接收文件上传目录
$namePath = request()->param('type');
//获取表单上传文件
$file = request()->file('file');
$upload_dir = '/'.$namePath; //组装文件保存目录
$suffix='jpg,jpeg,png,gif'; //文件格式
$size='3'; //文件大小
try {
//验证器验证上传的文件
validate(['file'=>[
//限制文件大小
'fileSize' => $size * 1024 * 1024,
//限制文件后缀
'fileExt' => 'jpg,jpeg,png,gif'
]],[
'file.fileSize' => '上传的文件大小不能超过'.$size.'M',
'file.fileExt' => '请上传后缀为:'.$suffix.'的文件'
])->check(['file'=>$file]);
//上传文件到本地服务器
$filename = \think\facade\Filesystem::disk('public')->putFile($upload_dir, $file);
;
if ($filename){
$src = '/uploads/'.str_replace('\\', '/', $filename);
return json(['code'=>1,'msg'=>'上传成功','data'=>['src'=>$src]]);
}else{
return json(['code'=>0,'msg'=>'上传失败']);
}
}catch (ValidateException $e){
return json(['code'=>0,'msg'=>$e->getMessage()]);
}
}else{
return json(['code'=>0,'msg'=>'非法请求']);
}
}
}
?>
2、前端代码:
<div class="layui-form-item layui-form-text">
<label>ICON</label>
<div>
<div id="test10">
<i></i>
<p>点击上传,或将文件拖拽到此处</p>
<div id="uploadDemoView" {php}if( isset($sys_config->sys_icon) != '' ) echo 'style ="display:block !important;" ';{/php}>
<hr>
<img src="{php}if( isset($sys_config->sys_icon) != '' ) echo $sys_config->sys_icon ;{/php}" alt="上传成功后渲染" style="max-width: 196px">
<input type="hidden" name="sys_icon" id="sysIcon" value="{php}if( isset($sys_config->sys_icon) != '' ) echo $sys_config->sys_icon ;{/php}">
</div>
</div>
</div>
</div>
3、Javascrpt代码:这里调用改方法并传递参数{type:'config'}
<script>
layui.use(['upload','form'], function () {
var form = layui.form
,layer = layui.layer
,upload = layui.upload
,$ = layui.$;
//拖拽上传
upload.render({
elem: '#test10'
,url: '{:url("union.upload.uploadImg")}' //改成您自己的上传接口
,exts:'jpg|png|gif|bmp|jpeg'
// ,auto:false
// // ,field:''
// ,bindAction:'#settingFile'
,data:{type:'config'}
,done: function(res){
layer.msg('上传成功');
layui.$('#uploadDemoView').removeClass('layui-hide').find('img').attr('src', res.data.src);
layui.$('#sysIcon').attr('value', res.data.src);
console.log(res)
}
});
});
</script>
沃梦达教程
本文标题为:ThinkPHP6单文件上传封装
猜你喜欢
- PHP实现微信支付(jsapi支付)流程步骤详解 2022-10-09
- PHP仿tp实现mvc框架基本设计思路与实现方法分析 2022-10-18
- windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境) 2023-09-02
- 用nohup命令实现PHP的多进程 2023-09-02
- laravel实现按月或天或小时统计mysql数据的方法 2023-02-22
- laravel通用化的CURD的实现 2023-03-17
- PHP中PDO事务处理操作示例 2022-10-15
- Laravel balde模板文件中判断数据为空方法 2023-08-30
- php微信公众号开发之秒杀 2022-11-23
- PHP简单实现二维数组的矩阵转置操作示例 2022-10-02