Upload.php 3.4 KB

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