文件上传
代码如下:
/**
* 上传文件
* @author sxt
* @param string $field_name 上传的参数名
* @param string $save_dir 保存目录
* @param array $config 配置 大小 和 扩展名
* @return array|string
*/
function upload($field_name='image',$save_dir='/upload/image',$config=['size'=>1048576,'ext'=>'jpg,png,gif']){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file($field_name);
if(empty($file)){
return '未选择上传文件!';
}
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->validate($config)->move(ROOT_PATH . 'public' .$save_dir);
if($info){
// 成功上传后 获取上传信息
return ['save_path'=>$save_dir.'/'.str_replace('\\','/',$info->getSaveName()),'ext'=>$info->getExtension(),'filename'=>$info->getFilename()];
}else{
// 上传失败获取错误信息
return $file->getError();
}
}
/**
* 保存base64提交的图片文件
* @author lhw
* @param string $base64_image 图片的编码字符串
* @param bool $domain 是返回带域名url地址
* @param array $config 默认配制,dir:保存的目录名称,相对路径或绝对路径;url:相对于域名访问的路径地址;ext:图片扩展名称;size:图片文件大小
* @throws Exception
* @return void|array 返回保存后带目录的文件名称和访问url地址
*/
function saveBase64Image($base64_image, $domain = false, $config = [])
{
//默认配制
$conf = ['dir'=>'./upload/image/','url'=>'/upload/image/','ext'=>['png','jpg','jpeg','gif'],'size'=>2000000];
if (!empty($config)) {
//合并配制
$conf = array_merge($conf, $config);
}
//$base64_image为图片的编码字符串
if (empty($base64_image)) {
return ;
}
preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result);
try{
if (count($result) != 3) {
throw new \think\Exception('图片数据不正确。');
}
$file_ext = strtolower($result[2]);
if (!in_array($file_ext, $conf['ext'])) {
throw new \think\Exception('上传图片文件扩展不支持。');
}
if (strlen($base64_image) > $conf['size']) {
throw new \think\Exception('上传图片文件太大了。');
}
$date = date('Ymd');
$pathname = $conf['dir'].'/'.$date;
if (!is_dir($pathname) && !mkdir($pathname, 0777, true)) {
throw new \think\Exception('保存的图片目录没有权限。');
}
$name = md5($base64_image).'.'.$file_ext; //图片文件名加上图片扩展
$savepath = $pathname.'/'.$name; //图片保存目录
//对图片进行解析并保存
if (!file_put_contents($savepath, base64_decode(str_replace($result[1], '', $base64_image)))) {
throw new \think\Exception('保存图片文件失败。');
}
$server_name = '';
if ($domain) {
$server_name = '//'.$_SERVER['SERVER_NAME'];
if (is_ssl() || (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'https://') === 0)) {
$server_name = 'https:'.$server_name;
}
}
$saveurl = $server_name.$conf['url'].'/'.$date.'/'.$name;
return ['dir'=>$savepath, 'url'=>$saveurl];
}catch (Exception $e){
showJson($e->getMessage());
}
}`