Upload.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <?php
  2. namespace app\admin\controller;
  3. use think\Db;
  4. class Upload extends Base
  5. {
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. }
  10. public function index()
  11. {
  12. $param = input();
  13. $this->assign('path',$param['path']);
  14. $this->assign('id',$param['id']);
  15. $this->assign('title',lang('upload_pic'));
  16. return $this->fetch('admin@upload/index');
  17. }
  18. public function test()
  19. {
  20. $temp_file = tempnam(sys_get_temp_dir(), 'Tux');
  21. if($temp_file){
  22. echo lang('admin/upload/test_write_ok').':' . $temp_file;
  23. }
  24. else{
  25. echo lang('admin/upload/test_write_err').':' . sys_get_temp_dir() ;
  26. }
  27. }
  28. public function upload()
  29. {
  30. $param = input();
  31. $param['from'] = empty($param['from']) ? '' : $param['from'];
  32. $param['input'] = empty($param['input']) ? 'file' : $param['input'];
  33. $param['flag'] = empty($param['flag']) ? 'vod' : $param['flag'];
  34. $param['thumb'] = empty($param['thumb']) ? '0' : $param['thumb'];
  35. $param['thumb_class'] = empty($param['thumb_class']) ? '' : $param['thumb_class'];
  36. $param['user_id'] = empty($param['user_id']) ? '0' : $param['user_id'];
  37. $config = config('maccms.site');
  38. $pre= $config['install_dir'];
  39. if(!empty($param['from'])){
  40. $cp = 'app\\common\\extend\\editor\\' . ucfirst($param['from']);
  41. if (class_exists($cp)) {
  42. $c = new $cp;
  43. $c->front($param);
  44. }
  45. else{
  46. return self::upload_return(lang('admin/upload/not_find_extend'), '');
  47. }
  48. }
  49. else{
  50. $pre='';
  51. }
  52. // 获取表单上传文件 例如上传了001.jpg
  53. $file = request()->file($param['input']);
  54. $data = [];
  55. if (empty($file)) {
  56. return self::upload_return(lang('admin/upload/no_input_file'), $param['from']);
  57. }
  58. if ($file->getMime() == 'text/x-php') {
  59. return self::upload_return(lang('admin/upload/forbidden_ext'), $param['from']);
  60. }
  61. $upload_image_ext = 'jpg,jpeg,png,gif';
  62. $upload_file_ext = 'doc,docx,xls,xlsx,ppt,pptx,pdf,wps,txt,rar,zip,torrent';
  63. $upload_media_ext = 'rm,rmvb,avi,mkv,mp4,mp3';
  64. $sys_max_filesize = ini_get('upload_max_filesize');
  65. $config = config('maccms.upload');
  66. // 格式、大小校验
  67. if ($file->checkExt($upload_image_ext)) {
  68. $type = 'image';
  69. }
  70. elseif ($file->checkExt($upload_file_ext)) {
  71. $type = 'file';
  72. }
  73. elseif ($file->checkExt($upload_media_ext)) {
  74. $type = 'media';
  75. }
  76. else {
  77. return self::upload_return(lang('admin/upload/forbidden_ext'), $param['from']);
  78. }
  79. if($param['flag']=='user'){
  80. $uniq = $param['user_id'] % 10;
  81. // 上传附件路径
  82. $_upload_path = ROOT_PATH . 'upload' . '/user/' . $uniq .'/';
  83. // 附件访问路径
  84. $_save_path = 'upload'. '/user/' . $uniq .'/';
  85. $_save_name = $param['user_id'] . '.jpg';
  86. if(!file_exists($_save_path)){
  87. mac_mkdirss($_save_path);
  88. }
  89. $upfile = $file->move($_upload_path,$_save_name);
  90. if (!is_file($_upload_path.$_save_name)) {
  91. return self::upload_return(lang('admin/upload/upload_faild'), $param['from']);
  92. }
  93. $file = $_save_path.str_replace('\\', '/', $_save_name);
  94. $config= [
  95. 'thumb_type'=>6,
  96. 'thumb_size'=> $GLOBALS['config']['user']['portrait_size'],
  97. ];
  98. $new_thumb = $param['user_id'] .'.jpg';
  99. $new_file = $_save_path . $new_thumb;
  100. try {
  101. $image = \think\Image::open('./' . $file);
  102. $t_size = explode('x', strtolower($GLOBALS['config']['user']['portrait_size']));
  103. if (!isset($t_size[1])) {
  104. $t_size[1] = $t_size[0];
  105. }
  106. $res = $image->thumb($t_size[0], $t_size[1], 6)->save('./' . $new_file);
  107. $file_count = 1;
  108. $file_size = round($upfile->getInfo('size')/1024, 2);
  109. $data = [
  110. 'file' => $new_file,
  111. 'type' => $type,
  112. 'size' => $file_size,
  113. 'flag' => $param['flag'],
  114. 'ctime' => request()->time(),
  115. 'thumb_class'=>$param['thumb_class'],
  116. ];
  117. return self::upload_return(lang('admin/upload/upload_success'), $param['from'], 1, $data);
  118. }
  119. catch(\Exception $e){
  120. return self::upload_return(lang('admin/upload/make_thumb_faild'), $param['from']);
  121. }
  122. exit;
  123. }
  124. // 上传附件路径
  125. $_upload_path = ROOT_PATH . 'upload' . '/' . $param['flag'] . '/' ;
  126. // 附件访问路径
  127. $_save_path = 'upload'. '/' . $param['flag'] . '/';
  128. $ymd = date('Ymd');
  129. $n_dir = $ymd;
  130. for($i=1;$i<=100;$i++){
  131. $n_dir = $ymd .'-'.$i;
  132. $path1 = $_upload_path . $n_dir. '/';
  133. if(file_exists($path1)){
  134. $farr = glob($path1.'*.*');
  135. if($farr){
  136. $fcount = count($farr);
  137. if($fcount>999){
  138. continue;
  139. }
  140. else{
  141. break;
  142. }
  143. }
  144. else{
  145. break;
  146. }
  147. }
  148. else{
  149. break;
  150. }
  151. }
  152. $savename = $n_dir . '/' . md5(microtime(true));
  153. $upfile = $file->move($_upload_path,$savename);
  154. if (!is_file($_upload_path.$upfile->getSaveName())) {
  155. return self::upload_return(lang('admin/upload/upload_faild'), $param['from']);
  156. }
  157. //附件访问地址
  158. //$_file_path = $_save_path.$upfile->getSaveName();
  159. $file_count = 1;
  160. $file_size = round($upfile->getInfo('size')/1024, 2);
  161. $data = [
  162. 'file' => $_save_path.str_replace('\\', '/', $upfile->getSaveName()),
  163. 'type' => $type,
  164. 'size' => $file_size,
  165. 'flag' => $param['flag'],
  166. 'ctime' => request()->time(),
  167. 'thumb_class'=>$param['thumb_class'],
  168. ];
  169. $data['thumb'] = [];
  170. if ($type == 'image') {
  171. //水印
  172. if ($config['watermark'] == 1) {
  173. model('Image')->watermark($data['file'],$config,$param['flag']);
  174. }
  175. // 缩略图
  176. if ($param['thumb']==1 && $config['thumb'] == 1) {
  177. $dd = model('Image')->makethumb($data['file'],$config,$param['flag']);
  178. if(is_array($dd)){
  179. $data = array_merge($data,$dd);
  180. }
  181. }
  182. }
  183. unset($upfile);
  184. if ($config['mode'] == 2) {
  185. $config['mode'] = 'upyun';
  186. }
  187. elseif ($config['mode'] == 3){
  188. $config['mode'] = 'qiniu';
  189. }
  190. elseif ($config['mode'] == 4) {
  191. $config['mode'] = 'ftp';
  192. }
  193. elseif ($config['mode'] == 5) {
  194. $config['mode'] = 'weibo';
  195. }
  196. $config['mode'] = strtolower($config['mode']);
  197. if(!in_array($config['mode'],['local','remote'])){
  198. $data['file'] = model('Upload')->api($data['file'],$config);
  199. if(!empty($data['thumb'])){
  200. $data['thumb'][0]['file'] = model('Upload')->api($data['thumb'][0]['file'],$config);
  201. }
  202. }
  203. if(!empty($param['from'])){
  204. if(substr($data['file'],0,4)!='http' && substr($data['file'],0,4)!='mac:'){
  205. $data['file'] = $pre. $data['file'];
  206. }
  207. else{
  208. $data['file'] = mac_url_content_img($data['file']);
  209. }
  210. }
  211. return self::upload_return(lang('admin/upload/upload_success'), $param['from'], 1, $data);
  212. }
  213. private function upload_return($info='',$from='',$status=0,$data=[])
  214. {
  215. $arr = [];
  216. if(!empty($from)){
  217. $cp = 'app\\common\\extend\\editor\\' . ucfirst($from);
  218. if (class_exists($cp)) {
  219. $c = new $cp;
  220. $arr = $c->back($info,$status,$data);
  221. }
  222. }
  223. else{
  224. $arr['msg'] = $info;
  225. $arr['code'] = $status;
  226. $arr['data'] = $data;
  227. }
  228. return $arr;
  229. }
  230. }