当前位置:网站首页>fastadmin图片上传方法改造
fastadmin图片上传方法改造
2022-08-09 08:46:00 【tjg888888】
文件路径:application/admin/controller/ajax.php
方法:
upload
改造为:
public function upload() { $fileNow = request()->file('file')->getInfo(); $name = $fileNow['name']; $format = strrchr($name, '.');//截取文件后缀名如 (.jpg) $oss = new OssClient( env('oss.accessKeyId'), env('oss.accessSecret'), env('oss.endpoint') ); $fileName = "backend/upload/".date('Ymd'.time()).sha1(date('YmdHis', time()) . uniqid()) . $format; $result = $oss->uploadFile(env('oss.publicbucket'), $fileName, $fileNow['tmp_name']); $ossurl = $result["info"]["url"]; $ossurl = str_replace('http','https',$ossurl); Config::set('default_return_type', 'json'); $file = $this->request->file('file'); if (empty($file)) { $this->error(__('No file upload or server upload limit exceeded')); } //判断是否已经存在附件 $sha1 = $file->hash(); $extparam = $this->request->post(); $upload = Config::get('upload'); preg_match('/(\d+)(\w+)/', $upload['maxsize'], $matches); $type = 0; $typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3]; $size = (int)$upload['maxsize'] * pow(1024, isset($typeDict[$type]) ? $typeDict[$type] : 0); $fileInfo = $file->getInfo(); $suffix = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION)); $suffix = $suffix ? $suffix : 'file'; $replaceArr = [ '{year}' => date("Y"), '{mon}' => date("m"), '{day}' => date("d"), '{hour}' => date("H"), '{min}' => date("i"), '{sec}' => date("s"), '{random}' => Random::alnum(16), '{random32}' => Random::alnum(32), '{filename}' => $suffix ? substr($fileInfo['name'], 0, strripos($fileInfo['name'], '.')) : $fileInfo['name'], '{suffix}' => $suffix, '{.suffix}' => $suffix ? '.' . $suffix : '', '{filemd5}' => md5_file($fileInfo['tmp_name']), ]; $savekey = $upload['savekey']; $savekey = str_replace(array_keys($replaceArr), array_values($replaceArr), $savekey); $uploadDir = substr($savekey, 0, strripos($savekey, '/') + 1); $fileName = substr($savekey, strripos($savekey, '/') + 1); // $splInfo = $file->validate(['size' => $size])->move(ROOT_PATH . '/public/uploads' . $uploadDir, $fileName); if ($splInfo) { $imagewidth = $imageheight = 0; if (in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf'])) { $imgInfo = getimagesize($splInfo->getPathname()); $imagewidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth; $imageheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight; } $params = array( 'admin_id' => (int)$this->auth->id, 'user_id' => 0, 'filesize' => $fileInfo['size'], 'imagewidth' => $imagewidth, 'imageheight' => $imageheight, 'imagetype' => $suffix, 'imageframes' => 0, 'mimetype' => $fileInfo['type'], 'url' => $uploadDir . $splInfo->getSaveName(), 'uploadtime' => time(), 'storage' => 'local', 'sha1' => $sha1, 'extparam' => json_encode($extparam), ); $attachment = model("attachment"); $attachment->data(array_filter($params)); $attachment->save(); \think\facade\Hook::listen("upload_after", $attachment); $this->success(__('Upload successful'), null, [ 'url' => $ossurl ]); } else { // 上传失败获取错误信息 $this->error($file->getError()); } }
边栏推荐
猜你喜欢
随机推荐
Venture DAO 行业研报:宏观和经典案例分析、模式总结、未来建议
get一个小技巧,教你如何在typora写文章上传图片到博客上
jdbctemplate connects to sql server, the data found in the code is inconsistent with the database, how to solve it?
epoll LT和ET 问题总结
数制之间的转换
QT程序生成独立exe程序(避坑版)
【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式
Arduino+2片74hc595 驱动8x8(共阳)点阵(1008BS)
matlab——解线性方程组 与 非线性方程组
三次握手,四次挥手
[漏洞复现]CVE-2018-7490(路径遍历)
RDMA
Different styles of Flask-restful
VoLTE基础自学系列 | IMS的业务触发机制
【GNN终身学习】2022 CVPR 终身图学习
nyoj306 走迷宫(搜索+二分)
【CNN】白话迁移学习中域适应
VMware virtual machine cannot be connected to the Internet after forced shutdown
UE4 RTS 框选功能实现
权限管理模型 ---- ACL、RBAC和ABAC(详解)