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)]); } }