formOssTrait.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace App\Admin\Controllers\Traits\WxSettingTraits;
  3. use App\Wen\Utils\GatewayUtils;
  4. use App\Wen\Utils\Settings;
  5. use App\Wen\Utils\SiteUtils;
  6. use Dcat\Admin\Layout\Content;
  7. use Dcat\Admin\Widgets\Form;
  8. use Dcat\Admin\Widgets\Tooltip;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Cache;
  11. trait formOssTrait{
  12. public function oss(Content $content, Request $request)
  13. {
  14. if ($request->isMethod('post')) {
  15. $data = $request->post();
  16. if(!_empty_(_array_key($data, 'bucket', ''))){
  17. // 使用 preg_match 来匹配
  18. if (preg_match('/.*-\d{10}$/', trim($data['bucket']))) {
  19. return $this->response()->error('存储空间名称 Bucket配置错误,请看红色注意事项');
  20. }
  21. }
  22. SiteUtils::forget_config_data();
  23. if ($data['ossType'] == 'cosv5') {
  24. $configData = [
  25. 'bucket' => $data['bucket'] ?? '',
  26. 'region' => $data['region'] ?? '',
  27. 'appId' => $data['appId'] ?? '',
  28. 'secretId' => $data['secretId'] ?? '',
  29. 'secretKey' => $data['secretKey'] ?? '',
  30. 'domain' => rtrim(_array_key($data, 'domain', ''), '/')
  31. ];
  32. Settings::set('cosv5', $configData, true);
  33. }
  34. Settings::set('ossType', 'cosv5', true);
  35. Settings::set('image_unused_keep_days', $data['image_unused_keep_days'], true);
  36. Settings::set('chat_expire_days', $data['chat_expire_days'], true);
  37. _update_env([
  38. "COSV5_APP_ID" => $data['appId'] ?? '',
  39. "COSV5_SECRET_ID" => $data['secretId'] ?? '',
  40. "COSV5_SECRET_KEY" => $data['secretKey'] ?? '',
  41. "COSV5_BUCKET" => $data['bucket'] ?? '',
  42. "COSV5_REGION" => $data['region'] ?? '',
  43. "COSV5_CDN" => str_replace(['https://', 'http://'], '', $data['domain'] ?? ''),
  44. ], ['COSV5_TOKEN', 'COSV5_TIMEOUT', 'COSV5_CONNECT_TIMEOUT', 'COSV5_SCHEME', 'COSV5_READ_FROM_CDN', 'COSV5_CDN_KEY', 'COSV5_ENCRYPT']);
  45. $__global_config_version__ = Settings::get('__global_config_version__', 1) + 1;
  46. Settings::set('__global_config_version__', $__global_config_version__);
  47. GatewayUtils::success('all', 13, [ 'version' => $__global_config_version__, 'file' => basename(__FILE__) ]);
  48. return $this->response()->success('保存成功!')->refresh();
  49. }
  50. $form = new Form();
  51. $form->html(function () {
  52. return '';
  53. }, '<b>一、存储配置</b>');
  54. $form->html(function () {
  55. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">这里解释一下为什么只能配置腾讯云cos,因为系统越来越复杂,涉及到图片处理,视频截屏,图片清理等等功能,另外经过对比腾讯云比七牛啥的都便宜,所以只适配腾讯云cos,不会安排其他云对象存储或者本地</div>';
  56. }, '');
  57. $form->radio('ossType')->help('点击查看<a href="https://doc.minisns.cn/doc/62/" target="_blank">配置教程</a>')
  58. ->when('cosv5', function (Form $form) {
  59. $cosv5 = Settings::get('cosv5', []);
  60. $form->text('bucket', '存储空间名称 Bucket')->help('<b style="color:red;">注意</b>:这里不要填-appid,点击<a href="https://img.mini.minisns.cn/images/cos_tip.jpg" target="_blank">查看教程</a>')->default($cosv5['bucket'] ?? '');
  61. $form->text('region', '所属地域 Region')->default($cosv5['region'] ?? '');
  62. $form->text('appId', 'AppId')->default($cosv5['appId'] ?? '');
  63. $form->text('secretId', 'SecretId')->help('<a href="https://img.mini.minisns.cn/images/appsecret.png" target="_blank">查看说明</a>')->default($cosv5['secretId'] ?? '');
  64. $form->password('secretKey', 'SecretKey')->default($cosv5['secretKey'] ?? '');
  65. $form->url('domain', 'Domain')->help('请补全http:// 或 https://,例如:http://img.minisns.cn')->default($cosv5['domain'] ?? '');
  66. })
  67. ->options([
  68. 'cosv5' => '腾讯云cos',
  69. ])
  70. ->default(Settings::get('ossType', 'cosv5'));
  71. $form->divider();
  72. $form->html(function () {
  73. return '';
  74. }, '<b>二、策略配置</b>');
  75. $form->html(function () {
  76. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">两种类型的未被引用附件: <br>1、用户上传图片后,没有后续动作,比如发布笔记,发表评论,更新资料,提交反馈,提交举报等。<br>2、笔记,评论等被主动删除后,图片也会成为未被引用</div>';
  77. }, '');
  78. $res3 = __system__paycode__tip__(3);
  79. Tooltip::make('.mini_global_admin_open_not_support_tip')
  80. ->bottom()
  81. ->title($res3['tip']);
  82. $form->number('image_unused_keep_days', '附件未被引用几天后清理')->help($res3['text'])->default(Settings::get('image_unused_keep_days', 10));
  83. $form->number('chat_expire_days', '聊天记录过期时间(天)')->help($res3['text'].'默认三个月,则程序会自动删除三个月之前的聊天记录,并清理掉附件')->default(Settings::get('chat_expire_days', 90));
  84. $form->divider();
  85. $form->html(function () {
  86. return '<span style="color: red;font-weight: bold;">以下若需要文件上传到服务器验证,统一上传到网站的public目录</span>';
  87. }, '');
  88. $form->html(function () {
  89. return '';
  90. }, '<b>三、微信小程序域名白名单</b>');
  91. $form->html(function () {
  92. return '';
  93. }, '<a href="https://img.mini.minisns.cn/images/wechat_domain_position.jpg" target="_blank">配置位置</a>');
  94. $cosv5 = Settings::get('cosv5', []);
  95. $domains = env('APP_URL').'<br/>
  96. '.$cosv5['domain'].'<br/>'.'https://'.$cosv5['bucket'].'-'.$cosv5['appId'].'.cos.'.$cosv5['region'].'.myqcloud.com'.($cosv5['domain'] == 'https://img.mini.minisns.cn' ? '' : '<br/>https://img.mini.minisns.cn').'<br/>https://thirdwx.qlogo.cn<br/>https://open.weixin.qq.com<br/>';
  97. $form->html(function () use ($domains){
  98. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.$domains.'</div>';
  99. }, 'request合法域名');
  100. $form->html(function () use ($domains) {
  101. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">wss://'.get_mini_domain().'</div>';
  102. }, 'socket合法域名');
  103. $form->html(function () use ($domains){
  104. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.$domains.'</div>';
  105. }, 'uploadFile合法域名');
  106. $form->html(function () use ($domains){
  107. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.$domains.'</div>';
  108. }, 'downloadFile合法域名');
  109. $form->html(function () use ($domains){
  110. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.str_replace('https://', 'udp://', $domains).'</div>';
  111. }, 'udp合法域名');
  112. $form->html(function () use ($domains){
  113. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.str_replace('https://', 'tcp://', $domains).'</div>';
  114. }, 'tcp合法域名');
  115. $form->html(function () {
  116. return '';
  117. }, '<b>四、微信小程序业务域名</b>');
  118. $form->html(function () use ($domains){
  119. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.env('APP_URL').'<br/>'.Settings::get('app_h5_home', '').'</div>';
  120. }, '业务域名');
  121. $form->html(function () {
  122. return '';
  123. }, '<b>五、公众号后台配置</b>');
  124. $form->html(function () {
  125. return '';
  126. }, '<a href="https://img.mini.minisns.cn/images/mp_back_seting1.png" target="_blank">配置位置</a>');
  127. $form->html(function () use ($domains){
  128. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.env('APP_URL').'<br/>'.Settings::get('app_h5_home', '').'</div>';
  129. }, '业务域名');
  130. $form->html(function () use ($domains){
  131. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.env('APP_URL').'<br/>'.Settings::get('app_h5_home', '').'</div>';
  132. }, 'JS接口安全域名');
  133. $form->html(function () use ($domains){
  134. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">'.env('APP_URL').'</div>';
  135. }, '网页授权域名');
  136. $form->html(function () {
  137. return '';
  138. }, '<a href="https://img.mini.minisns.cn/images/mp_back_seting2.png" target="_blank">配置位置</a>');
  139. $form->html(function () use ($domains){
  140. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">自己的服务器ip</div>';
  141. }, 'IP白名单');
  142. return $content->title('上传设置')
  143. ->body(
  144. <<<HTML
  145. <div class="card">{$form->render()}</div>
  146. HTML
  147. );
  148. }
  149. }