Files
pgserver3.0/pgserver/application/api/controller/AppUpload.php
annnj-company 130c1026c4 first commit
2026-04-17 18:29:53 +08:00

95 lines
4.2 KiB
PHP

<?php
namespace app\api\controller;
use app\admin\service\FileService;
use app\model\Attachment;
use think\Db;
use think\File;
use think\Log;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2020/3/4
* Time: 9:37
*/
class AppUpload extends Base
{
public function upload(FileService $FileService)
{
$base64_img = input('image/a');
if (empty($base64_img)) return $this->buildFailed(-1, "上传文件不能为空!");
//匹配出图片的格式
$up_dir = config('uploadFile.img_path') . 'uploads' . DS . date('Ymd');//存放在当前目录的upload文件夹下
if (!is_dir($up_dir)) {
mkdir($up_dir, 0755, true);
}
$arr = [];
// 启动事务
Db::startTrans();
foreach ($base64_img as $k => $v) {
//匹配出图片的格式
if (!preg_match('/^(data:\s*image\/(\w+);base64,)/', $v, $result)) return $this->buildFailed(-1, "请上传base64文件!");
$base64_code = str_replace($result[1], '', $v);
if (empty($base64_code)) {
return $this->buildFailed(-1, "请上传base64文件!!");
}
$type = $result[2];
//判断库中是否存在
$id = Db::name('Attachment')->where([
'md5' => md5(base64_decode($base64_code)),
'sha1' => sha1(base64_decode($base64_code)),
])->value('id');
if ($id) {
$arr[] = $id;
continue;
}
if (!in_array($type, array('jpeg', 'jpg', 'gif', 'png', 'webp'))) return $this->buildFailed(-1, "请上传图片类型的文件!");
$savename = md5(microtime(true)) . '.' . $type;
$new_file = $up_dir . DS . $savename;
if (!file_put_contents($new_file, base64_decode($base64_code))) return $this->buildFailed(-1, "上传失败!");
$info = new File($new_file);
$image = \think\Image::open($new_file);
$thumPath690 = 'uploads' . DS . 'thumb690' . DS . date('Ymd', time());
$thumPath1024 = 'uploads' . DS . 'thumb1024' . DS . date('Ymd', time());
$insert_url = DS . 'uploads' . DS . date('Ymd') . DS . $savename;
$data = [
'name' => $savename, //图片原始名称
'savename' => $savename, //新的图片名称
'filesize' => $info->getSize(), //文件大小
'ext' => $info->getExtension(), //文件后缀
'md5' => $info->hash('md5'),
'sha1' => $info->hash('sha1'),
'mimetype' => $info->getMime(), //mime类型
'path' => config('uploadFile.img_path'), //路径
'url' => $insert_url,
'imagewidth' => $image->width(),
'imageheight' => $image->height(),
'create_time' => time(),
];
$thumb1 = $FileService->saveThumbCOS($new_file, $thumPath690, $data['imagewidth'], $data['imageheight'], $data['savename'], 690);
$thumb2 = $FileService->saveThumbCOS($new_file, $thumPath1024, $data['imagewidth'], $data['imageheight'], $data['savename'], 1024);
$data['thum1'] = $thumb1 != false ? $thumb1 : 'uploads' . DS . date('Ymd') . DS . $savename;
$data['thum2'] = $thumb2 != false ? $thumb2 : 'uploads' . DS . date('Ymd') . DS . $savename;
$file_path = config('uploadFile.img_path') . trim($insert_url, DS);
$res = ossUpload(str_replace("\\", "/", trim($insert_url, DS)), $file_path);
unset($info);
@unlink($new_file);
if ($res['code'] != 1) {
Db::rollback();
return $this->buildFailed(-1, '移动到阿里云图片服务器有误');
}
$result = Attachment::create($data);
if (empty($result)) {
// 回滚事务
Db::rollback();
return $this->buildFailed(-1, '添加附件表失败');
}
$arr[] = $result->id;
}
// 提交事务
Db::commit();
return $this->buildSuccess(['idstr' => implode(',', $arr)]);
}
}