Upload.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. *
  4. * @copyright ©2020 点小铺
  5. * @author hanj
  6. * @link: https://dyuit.com
  7. * Created by VSCode
  8. */
  9. namespace app\api\controller;
  10. use app\api\model\UploadFile;
  11. use app\api\model\Setting as SettingModel;
  12. use app\common\library\storage\Driver as StorageDriver;
  13. /**
  14. * 文件库管理
  15. * Class Upload
  16. * @package app\api\controller
  17. */
  18. class Upload extends Controller
  19. {
  20. private $config;
  21. private $user;
  22. /**
  23. * 构造方法
  24. * @throws \app\common\exception\BaseException
  25. * @throws \think\exception\DbException
  26. */
  27. public function _initialize()
  28. {
  29. parent::_initialize();
  30. // 存储配置信息
  31. $this->config = SettingModel::getItem('storage');
  32. // 验证用户
  33. $this->user = $this->getUser();
  34. }
  35. /**
  36. * 图片上传接口
  37. * @return array
  38. * @throws \think\Exception
  39. */
  40. public function image()
  41. {
  42. // 实例化存储驱动
  43. $StorageDriver = new StorageDriver($this->config);
  44. // 设置上传文件的信息
  45. $StorageDriver->setUploadFile('iFile');
  46. // 上传图片
  47. if (!$StorageDriver->upload()) {
  48. return json(['code' => 0, 'msg' => '图片上传失败' . $StorageDriver->getError()]);
  49. }
  50. // 图片上传路径
  51. $fileName = $StorageDriver->getFileName();
  52. // 图片信息
  53. $fileInfo = $StorageDriver->getFileInfo();
  54. // 添加文件库记录
  55. $uploadFile = $this->addUploadFile($fileName, $fileInfo, 'image');
  56. // 图片上传成功
  57. return json(['code' => 1, 'msg' => '图片上传成功', 'data' => $uploadFile->visible(['file_id'])]);
  58. }
  59. /**
  60. * 添加文件库上传记录
  61. * @param $fileName
  62. * @param $fileInfo
  63. * @param $fileType
  64. * @return UploadFile
  65. */
  66. private function addUploadFile($fileName, $fileInfo, $fileType)
  67. {
  68. // 存储引擎
  69. $storage = $this->config['default'];
  70. // 存储域名
  71. $fileUrl = isset($this->config['engine'][$storage]['domain'])
  72. ? $this->config['engine'][$storage]['domain'] : '';
  73. // 添加文件库记录
  74. $model = new UploadFile;
  75. $model->add([
  76. 'storage' => $storage,
  77. 'file_url' => $fileUrl,
  78. 'file_name' => $fileName,
  79. 'file_size' => $fileInfo['size'],
  80. 'file_type' => $fileType,
  81. 'extension' => pathinfo($fileInfo['name'], PATHINFO_EXTENSION),
  82. 'is_user' => 1
  83. ]);
  84. return $model;
  85. }
  86. }