PluploadController.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. /**
  3. * author: nj
  4. * email:
  5. * date: 2021-10-16 14:43
  6. */
  7. namespace Modules\ManageApi\Controllers;
  8. use App\Repositories\UploadFileRepository;
  9. use App\Repositories\Utils\Check;
  10. use File;
  11. class PluploadController extends BaseController
  12. {
  13. private function runUpload()
  14. {
  15. $request = request();
  16. $result = self::getResetMsgResult();
  17. $upload_sys_info = get_upload_sys_info();
  18. $upload_default_params = array(
  19. 'manager_uid' => $this->ctManagerUid,
  20. 'user_type' => 2, //0=游客, 1=前台用户, 2=后台用户
  21. 'is_appointed' => 0, //0-不固定高宽 1-固定高宽
  22. 'is_water' => 0, //0-无水印 1-加水印
  23. 'max_width' => 0, //最大宽度
  24. 'max_height' => 0, //最大高度
  25. 'max_size' => $upload_sys_info['upload_max_size'], //允许最大上传尺寸,单位K
  26. 'ext_type' => 1, //扩展名类型 0-不限制 1-图片 2-附件 3-flash 4-多媒体
  27. 'thumb_width' => array(1600, 600, 120),
  28. 'thumb_height' => array(1600, 600, 120),
  29. 'thumb_water' => array(0, 0, 0),
  30. 'server_no' => config('image_servers')['upload_server_no'], //当前配置的服务器编号.
  31. );
  32. $upload_field_name = $request->input('upload_field_name', ''); //上传字段名
  33. $module_alias =$request->input('module_alias', ''); //模块
  34. $related_id = intval($request->input('related_id', 0)); //关联ID
  35. $item_alias = $request->input('item_alias', ''); //子项别名
  36. $item_id = intval($request->input('item_id', 0)); //子项ID
  37. $max_size = intval($request->input('max_size', 0)); //上传最大尺寸限制
  38. $thumb_appointed = $request->input('thumb_appointed', ''); //是否强制尺寸高宽
  39. $thumb_water = $request->input('thumb_water', ''); //是否加水印
  40. $thumb_num = intval($request->input('thumb_num', 0)); //缩略图数量
  41. $thumb_max_width = $request->input('thumb_max_width', ''); //缩略图最大宽度,多组用半角逗号分隔开
  42. $thumb_max_height = $request->input('thumb_max_height', '');//缩略图最大高度,多组用半角逗号分隔开
  43. $ext_type = intval($request->input('ext_type', 1)); //文件扩展名限制类型 0-不限制 1-图片 2-附件 3-flash 4-多媒体
  44. $sub_dir = $request->input('sub_dir', ''); //子目录
  45. $user_type = 2; //0=游客, 1=前台用户, 2=后台用户
  46. $server_type = 0; //服务器类型, 0=本地服务器,1=自由可控远程服务器,3=第三方比如七牛
  47. $need_origin_pic = intval($request->input('need_origin_pic', 0));
  48. $unlink_origin_pic = $need_origin_pic == 0 ? true : false; //是否删除原图
  49. $serverNo = $request->input('server_no', null); // 服务器编号.
  50. if ($sub_dir) {
  51. if (!Check::dirName($sub_dir)) {
  52. $result['error']['code'] = -92;
  53. $result['error']['message'] = '子目录名有误';
  54. return $result;
  55. }
  56. }
  57. //判断外部提交的最大尺寸是否超出系统允许的最大尺寸
  58. if ($max_size > $upload_default_params['max_size']) {
  59. $max_size = $upload_default_params['max_size'];
  60. } elseif (empty($max_size)) {
  61. $max_size = $upload_default_params['max_size'];
  62. }
  63. $water_picture = public_path('assets/sys/watermark.png'); //水印图
  64. $water_picture_exists = File::exists($water_picture) ? true : false;
  65. $arr_thumb_max_width = $arr_thumb_max_height = $arr_thumb_water = $arr_thumb_appointed = array();
  66. $arr_thumb_max_width = explode(',', $thumb_max_width);
  67. $arr_thumb_max_height = explode(',', $thumb_max_height);
  68. $arr_thumb_water = explode(',', $thumb_water);
  69. $arr_thumb_appointed = explode(',', $thumb_appointed);
  70. $arr_ext = self::getAllowExtByType($ext_type);
  71. if ($max_size == -1) {
  72. $format_max_size = -1;
  73. } else {
  74. $format_max_size = $max_size * 1024;
  75. }
  76. $upload_save_dir = 'attachment'; // 目前写死,以后写配置里 todo.
  77. $save_root_path = public_path('');
  78. $uploader = new UploadFileRepository(
  79. $format_max_size,
  80. $arr_ext,
  81. array(),
  82. $upload_save_dir,
  83. $save_root_path
  84. );
  85. $uploader->urlBase = '/';
  86. $uploader->thumb = $thumb_num > 0 ? true : false;
  87. $uploader->thumbMaxWidth = $arr_thumb_max_width;
  88. $uploader->thumbMaxHeight = $arr_thumb_max_height;
  89. $uploader->thumbAppointed = $arr_thumb_appointed;
  90. $uploader->thumbWater = $arr_thumb_water;
  91. $uploader->waterType = 'picture';
  92. if ($water_picture_exists) {
  93. $uploader->waterPicture = $water_picture;
  94. }
  95. $uploader->waterPosition = 9; //位置9
  96. $uploader->unlinkOriginPic = $unlink_origin_pic; //是否除原图
  97. $uploader->subDir = $sub_dir;
  98. if (!empty($serverNo)) {
  99. $uploader->setServerNo($serverNo);
  100. }
  101. $upload_field_name = empty($upload_field_name) ? 'upload_files' : $upload_field_name;
  102. if ($uploader->upload($upload_field_name)) {
  103. $arr_attachments = $arr_origin_pics = array();
  104. $arr_attachment_list = $uploader->getResultFileInfo()[0];
  105. if ($arr_attachment_list) {
  106. foreach ($arr_attachment_list as $k => $v) {
  107. if (isset($v['link_url']) && $v['link_url']) {
  108. $link_url = $v['link_url'];
  109. $link_origin_url = $unlink_origin_pic == true ?
  110. '' : $v['origin_pic_relative_path'];
  111. $arr_attachment_list[$k]['id'] = '';
  112. $arr_attachments[$k] = $arr_attachment_list[$k];
  113. $arr_attachments[$k]['link_url'] = get_url_by_name($link_url);
  114. $arr_attachments[$k]['link_origin_url'] = get_url_by_name($link_origin_url); //原图绝对地址
  115. unset(
  116. $arr_attachments[$k]['user_type'],
  117. $arr_attachments[$k]['user_id'],
  118. $arr_attachments[$k]['origin_alias'],
  119. $arr_attachments[$k]['module_alias'],
  120. $arr_attachments[$k]['related_id'],
  121. $arr_attachments[$k]['ip'],
  122. $arr_attachments[$k]['item_alias'],
  123. $arr_attachments[$k]['item_id'],
  124. $arr_attachments[$k]['origin_pic_native_path'],
  125. $arr_attachments[$k]['file_native_path'],
  126. $arr_attachments[$k]['origin_pic_name'],
  127. $arr_attachments[$k]['origin_pic_size'],
  128. $arr_attachments[$k]['origin_pic_width'],
  129. $arr_attachments[$k]['origin_pic_height']
  130. );
  131. }
  132. }
  133. }
  134. $result['content'] = $arr_attachments;
  135. } else {
  136. $result['error']['code'] = -91;
  137. $result['error']['message'] = $uploader->getResultError();
  138. }
  139. return $result;
  140. }
  141. public function upload()
  142. {
  143. $result = self::runUpload();
  144. return response()->json($result);
  145. }
  146. public function uEditorUploadResult()
  147. {
  148. $result = array('ErrorCode' => 0, 'Message' => '', 'Content' => '');
  149. $upload_result = self::runUpload();
  150. $result['ErrorCode'] = $upload_result['error']['code'];
  151. $result['Message'] = $upload_result['error']['message'];
  152. $result['Content'] = $upload_result['content'];
  153. return $result;
  154. }
  155. public function editorMdUploadResult()
  156. {
  157. $result = array('ErrorCode' => 0, 'Message' => '', 'Content' => '');
  158. $upload_result = self::runUpload();
  159. $result['ErrorCode'] = $upload_result['error']['code'];
  160. $result['Message'] = $upload_result['error']['message'];
  161. $result['Content'] = $upload_result['content'];
  162. return $result;
  163. }
  164. /**
  165. * 获取重设的消息结果
  166. * @return array
  167. */
  168. private function getResetMsgResult()
  169. {
  170. return array( 'jsonrpc' => '2.0',
  171. 'error' => array('code' => 0, 'message' => '', 'id' => 'id'), 'content' => '' );
  172. }
  173. /**
  174. * 获取允许的扩展名
  175. * @param int $ext_type 扩展类型
  176. * @return array
  177. */
  178. private function getAllowExtByType($ext_type)
  179. {
  180. $arr_exts = array(
  181. 'picture' => array('jpg', 'gif', 'png', 'jpeg'),
  182. 'compress' => array('zip', 'rar', '7z', 'tar', 'bz2', 'gz', 'apk'),
  183. 'office' => array('docx', 'xlsx', 'pptx', 'doc', 'xls',
  184. 'ppt', 'pps', 'wps', 'et', 'dps', 'xml', 'kml'), //办公
  185. 'flash' => array('swf', 'flv', 'as', 'fla'), //FLASH
  186. 'media' => array("ra","rm","rmvb","avi","mpeg","mid","wma","wav","mp3","wmv","mov", 'mp4', 'm3u8', 'lrc'), //多媒体
  187. );
  188. $return_ext = array();
  189. switch ($ext_type) {
  190. case 1:
  191. $return_ext = $arr_exts['picture'];
  192. break;
  193. case 2:
  194. $return_ext = array_merge($arr_exts['compress'], $arr_exts['office']);
  195. break;
  196. case 3:
  197. $return_ext = $arr_exts['flash'];
  198. break;
  199. case 4:
  200. $return_ext = $arr_exts['media'];
  201. break;
  202. case 5:
  203. $return_ext = array_merge($arr_exts['picture'], $arr_exts['flash']);
  204. break;
  205. case 6:
  206. $return_ext = array_merge($arr_exts['flash'], $arr_exts['media']);
  207. break;
  208. default:
  209. break;
  210. }
  211. return $return_ext;
  212. }
  213. }