thinkphp6+layui实现文件上传功能
1.问题概述
开发中需要将一些模板文件传入服务器好让用户下载模板文件。
2.解决办法
前端:
layui.use(['jquery', 'layer', 'upload'], function () {
var upload = layui.upload;
var uploadInst = upload.render({
elem: '#test1',
url: 'filename/Controller/upload',//文件名/控制器名/函数名
accept: 'file',
exts:'pdf',
multiple:true,
number:5,
done: function(res){
if (res.code > 0) {
layer.msg(res.msg, {icon: 1, time: 3000});
} else {
layer.msg(res.msg, {icon: 2, time: 2000});
}
}
})
Controller:
public function upload()
{
$file=Request::file('file');
$fileName=$file->getOriginalName();
validate(['file'=>['fileSize'=>10*1024*1024]])->check(['file'=>$file]);
return json(SysFileService::upload($file,$fileName));
}
Service:
public static function upload($file,$fileName){
// 上传到本地服务器
$savename = Filesystem::disk('file')->putFileAs( '', $file, $fileName);
if($savename){
//数据库存储文件地址
$path=Filesystem::getDiskConfig('file','url').'/'.str_replace('\\','/',$savename);
$data['filename']=$fileName;
$data['filepath']=$path;
$data['id'] = Uuid::uuid4()->toString();
Db::startTrans();
try {
SysFile::create($data);//这里使用的是模型新增数据库数据
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return ['code'=>0,'msg'=>$e->getMessage()];
}
return ['code'=>1,'msg'=>"上传成功","data"=>["src"=>$path]];
}