Upload.php 2.4 KB

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