FileBaseController.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace common\controllers;
  3. use Yii;
  4. use yii\helpers\Json;
  5. use yii\web\Controller;
  6. use yii\filters\AccessControl;
  7. use yii\web\Response;
  8. use common\helpers\ArrayHelper;
  9. use common\helpers\UploadHelper;
  10. use common\helpers\ResultHelper;
  11. use common\models\common\Attachment;
  12. use common\models\common\AttachmentStorageConfig;
  13. use Exception;
  14. use common\traits\BaseControllerTrait;
  15. use common\traits\ErrorTrait;
  16. /**
  17. * Class FileBaseController
  18. * @package common\controllers
  19. * @author qimall
  20. */
  21. class FileBaseController extends Controller
  22. {
  23. use ErrorTrait;
  24. use BaseControllerTrait;
  25. /**
  26. * 关闭Csrf验证
  27. *
  28. * @var bool
  29. */
  30. public $enableCsrfValidation = false;
  31. /**
  32. * @var \League\Flysystem\Adapter\Local
  33. */
  34. protected $filesystem;
  35. // /**
  36. // * 行为控制
  37. // *
  38. // * @return array
  39. // */
  40. // public function behaviors()
  41. // {
  42. // return [
  43. // 'access' => [
  44. // 'class' => AccessControl::class,
  45. // 'rules' => [
  46. // [
  47. // 'allow' => true,
  48. // 'roles' => ['@'],// 登录
  49. // ],
  50. // ],
  51. // ],
  52. // ];
  53. // }
  54. public function actionUpload()
  55. {
  56. try {
  57. //上传权限验证 todo
  58. $post = Yii::$app->request->post();
  59. //上传类型
  60. $type = $post['upload_type'] ?? '';
  61. if(!$type || !isset(Attachment::$uploadTypeExplain[$type])){
  62. throw new Exception('上传类型有误');
  63. }
  64. $mall_id = $post['mall_id'] ?? 5;
  65. $config = AttachmentStorageConfig::getConfig($mall_id);
  66. $upload = new UploadHelper($config, $type);
  67. $upload->verifyFile();
  68. $upload->save();
  69. return ResultHelper::json(200, '上传成功', $upload->getBaseInfo($mall_id));
  70. } catch (\Exception $e) {
  71. return ResultHelper::json(404, $e->getMessage());
  72. }
  73. }
  74. /**
  75. * Markdown 图片上传
  76. *
  77. * @return array
  78. * @throws \yii\web\NotFoundHttpException
  79. */
  80. public function actionImagesMarkdown()
  81. {
  82. try {
  83. $upload = new UploadHelper(Yii::$app->request->get(), Attachment::UPLOAD_TYPE_IMAGES);
  84. $upload->uploadFileName = 'editormd-image-file';
  85. $upload->verifyFile();
  86. $upload->save();
  87. $info = $upload->getBaseInfo();
  88. Yii::$app->response->format = Response::FORMAT_JSON;
  89. return [
  90. 'success' => 1,
  91. 'url' => $info['url'],
  92. ];
  93. } catch (\Exception $e) {
  94. return ResultHelper::json(404, $e->getMessage());
  95. }
  96. }
  97. /**
  98. * base64编码的上传
  99. *
  100. * @return array
  101. */
  102. public function actionBase64()
  103. {
  104. try {
  105. // 保存扩展名称
  106. $extend = Yii::$app->request->post('extend', 'jpg');
  107. !in_array($extend, Yii::$app->params['uploadConfig']['images']['extensions']) && $extend = 'jpg';
  108. $data = Yii::$app->request->post('image', '');
  109. $upload = new UploadHelper(Yii::$app->request->post(), Attachment::UPLOAD_TYPE_IMAGES);
  110. $upload->verifyBase64($data, $extend);
  111. $upload->save(base64_decode($data));
  112. return ResultHelper::json(200, '上传成功', $upload->getBaseInfo());
  113. } catch (\Exception $e) {
  114. return ResultHelper::json(404, $e->getMessage());
  115. }
  116. }
  117. /**
  118. * 合并
  119. *
  120. * @return array
  121. */
  122. public function actionMerge()
  123. {
  124. $guid = Yii::$app->request->post('guid');
  125. $mergeInfo = Yii::$app->cache->get(UploadHelper::PREFIX_MERGE_CACHE . $guid);
  126. if (!$mergeInfo) {
  127. return ResultHelper::json(404, '找不到文件信息, 合并文件失败');
  128. }
  129. try {
  130. $upload = new UploadHelper($mergeInfo['config'], $mergeInfo['type'], true);
  131. $upload->setPaths($mergeInfo['paths']);
  132. $upload->setBaseInfo($mergeInfo['baseInfo']);
  133. $upload->merge();
  134. Yii::$app->cache->delete('upload-file-guid:' . $guid);
  135. return ResultHelper::json(200, '合并完成', $upload->getBaseInfo());
  136. } catch (\Exception $e) {
  137. return ResultHelper::json(404, $e->getMessage());
  138. }
  139. }
  140. /**
  141. * oss直传配置
  142. *
  143. * @return array
  144. * @throws \Exception
  145. */
  146. public function actionOssAccredit()
  147. {
  148. // 上传类型
  149. $type = Yii::$app->request->get('type');
  150. $typeConfig = Yii::$app->params['uploadConfig'][$type];
  151. $path = $typeConfig['path'] . date($typeConfig['subName'], time()) . "/";
  152. $oss = Yii::$app->uploadDrive->oss()->config($typeConfig['maxSize'], $path, 60 * 60 * 2, $type);
  153. return ResultHelper::json(200, '获取成功', $oss);
  154. }
  155. /**
  156. * 根据md5获取文件
  157. *
  158. * @return array
  159. */
  160. public function actionVerifyMd5()
  161. {
  162. $md5 = Yii::$app->request->post('md5');
  163. $drive = Yii::$app->request->post('drive');
  164. if ($file = Yii::$app->services->attachment->findByMd5($md5, $drive)) {
  165. $file['formatter_size'] = Yii::$app->formatter->asShortSize($file['size'], 2);
  166. $file['url'] = $file['base_url'];
  167. $file['upload_type'] = UploadHelper::formattingFileType($file['specific_type'], $file['extension'], $file['upload_type']);
  168. return ResultHelper::json(200, '获取成功', $file);
  169. }
  170. return ResultHelper::json(404, '找不到文件');
  171. }
  172. /**
  173. * 资源选择器
  174. *
  175. * @return array|string
  176. */
  177. public function actionSelector()
  178. {
  179. $upload_type = Yii::$app->request->get('upload_type', Attachment::UPLOAD_TYPE_IMAGES);
  180. $keyword = Yii::$app->request->get('keyword', '');
  181. $drive = Yii::$app->request->get('drive', '');
  182. $mall_id = 1;
  183. $result = Yii::$app->services->attachment->getListPage($mall_id,$upload_type, $drive, $keyword);
  184. // 判断是否直接返回json格式
  185. return $this->success('ok',$result);
  186. }
  187. }