TaoLer/app/common/lib/Uploads.php

111 lines
3.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common\lib;
use think\facade\Config;
use think\facade\Filesystem;
use think\exception\ValidateException;
use think\facade\Db;
class Uploads
{
protected $fileName;
protected $dirName;
protected $fileSize;
protected $fileType;
/**
* 获取上传文件的mime和后缀
* @param string $fileType 上传文件的类型只能为视频video文件application图片image,文本text
* @param string $type 获取文件的mime还是文件后缀ext
* @return array
*/
protected function getFileInfo(string $fileType,string $type)
{
$extType = Db::name('system')->where('id',1)->value('uptype');
$extArr = explode(',',$extType);
//查询系统配置中运行上传文件类型,组成新的数组
$fileMime = [];
foreach ($extArr as $k=>$v){
$k = stristr($v,':',true);//返回字符:前字符串
$fileMime[$k] = explode('|',substr($v,strrpos($v,":")+1)); //返回:后字符串转换为数组
}
//根据上传文件的类型得到允许的文件mime或后缀
$arr = [];
$fileTypeArr = explode('|',$fileType);
foreach($fileTypeArr as $ft){
if(array_key_exists($ft,$fileMime)){ //数组中是否存在上传的数组的键
foreach($fileMime as $k=>$v){
if($ft == $k){//文件类型和配置中类型相同时
//获取文件mime
if($type == 'mime'){
//拼接字符串组成新mime数组
foreach($v as $m){
$arr[] = $ft. '/' . $m;
}
}
//获取文件后缀
if($type == 'ext'){
$arr = array_merge($arr,$v); //合并数组
}
}
}
}
}
return $arr;
}
//上传文件
/**
* 上传文件
* @param string $fileName 文件名,form表单中的name
* @param string $dirName
* @param int $fileSize
* @param string $fileType
* @return \think\response\Json
*/
/**
* @param string $fileName 文件名,form表单中的name
* @param string $dirName 文件夹名,上传路径中的文件夹名称
* @param int $fileSize 文件大小,上传限制大小
* @param string $fileType 文件类型只能为视频video文件application图片image,文本text
* @param string $rule 文件命名规则默认md5,uniqid,date,sha1
* @return \think\response\Json
*/
public function put(string $fileName, string $dirName, int $fileSize, string $fileType, string $rule = null)
{
$file = request()->file($fileName);
//$type = $file->getMime();
$fileExt = $this->getFileInfo($fileType,'ext');
$fileMime = $this->getFileInfo($fileType,'mime');
try {
validate([$fileName=>['fileSize'=>$fileSize * 1024,'fileExt'=>$fileExt,'fileMime'=>$fileMime]])
->check(['file'=>$file]);
} catch (ValidateException $e) {
return json(['status'=>-1,'msg'=>$e->getMessage()]);
}
$savename = \think\facade\Filesystem::disk('public')->putFile(session('user_id'). '/' .$dirName, $file, $rule);
$upload = Config::get('filesystem.disks.public.url');
if($savename){
//$name = $file->hashName();
$name_path =str_replace('\\',"/",$upload.'/'.$savename);
//halt($name_path);
//$image = \think\Image::open("uploads/$name_path");
//$image->thumb(168, 168)->save("uploads/$name_path");
$res = ['status'=>0,'msg'=>'上传成功','url'=> $name_path];
}else{
$res = ['status'=>-1,'msg'=>'上传错误'];
}
return json($res);
}
}