FileUpload.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. <?php
  2. /**
  3. * 文件上传
  4. * User: Mike
  5. * Email: m@9026.com
  6. * Date: 2016/6/21
  7. * Time: 11:45
  8. */
  9. namespace App\Widget\Tools;
  10. class FileUpload {
  11. /**
  12. * 单个文件上传
  13. * @param $folder
  14. * @param string $position
  15. * @param array $option
  16. */
  17. public function single($folder, $id, $name = "data[file]", $file = "", $option = [], $param = [])
  18. {
  19. $file_types = 'jpg|jpeg|gif|png|bmp|doc|docx|xls|xlsx|ppt|htm|html|php|txt|zip|rar|gz|bz2|pdf';
  20. $option['position'] = isset($option['position']) ? $option['position'] : "alioss";
  21. $option['placeholder'] = isset($option['placeholder']) ? $option['placeholder'] : "";
  22. $option['button_class'] = isset($option['button_class']) ? $option['button_class'] : "";
  23. //扩展参数
  24. $extParam = '';
  25. if($param){
  26. foreach($param AS $key => $val){
  27. $extParam .= $key . ":" . $val . ',';
  28. }
  29. }
  30. $token = csrf_token();
  31. $html = <<<EOF
  32. <link href="/base/webuploader/webuploader.css" rel="stylesheet">
  33. <script src="/base/webuploader/webuploader.min.js"></script>
  34. <div class="WebUploader">
  35. <div class="WebUploader_button">
  36. <div class="input-group">
  37. <input type="text" class="form-control input-uploadfile" id="pdfUpload" value="{$file}" name="{$name}" placeholder="{$option['placeholder']}" readonly>
  38. <div class="input-group-btn">
  39. <div id="{$id}" class="btn-xs {$option['button_class']}">上传文件</div>
  40. </div>
  41. <div class="input-group-btn">
  42. <input type="button" class="btn btn-danger" onclick="del('{$file}')" style="margin-right:20px;" value="删除">
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <script type="text/javascript">
  48. function webUpload{$id}() {
  49. var uploaderthis="#{$id}";
  50. var uploader = WebUploader.create({
  51. auto: true,
  52. pick: {
  53. id: uploaderthis,
  54. multiple: false,
  55. },
  56. accept: {
  57. title: 'Files',
  58. extensions: "{$file_types}",
  59. },
  60. swf: "/base/webuploader/uploader.swf",
  61. server: "/admin/Base/Attachment/webupload",
  62. fileNumLimit: 300,
  63. fileSizeLimit: 30 * 1024 * 1024,
  64. fileSingleSizeLimit: 30 * 1024 * 1024,
  65. });
  66. uploader.option("formData", {
  67. $extParam
  68. _time: Math.random(),
  69. _token : "{$token}",
  70. _position : "{$option['position']}",
  71. elementid : "",
  72. file_type : "file",
  73. folder : "{$folder}"
  74. });
  75. uploader.on("error",function(type){
  76. if(type=='F_EXCEED_SIZE'){
  77. layer.msg("上传的文件不大于30MB", {icon: 2});
  78. return false;
  79. }else if(type=="Q_TYPE_DENIED"){
  80. layer.msg("请上传格式正确的文件", {icon: 2});
  81. return false;
  82. }else {
  83. layer.msg("服务器繁忙请稍候再试", {icon: 2});
  84. return false;
  85. }
  86. });
  87. uploader.on("uploadProgress",function(file,percentage){
  88. var re = /([0-9]+\.[0-9]{2})[0-9]*/;
  89. aNew = parseFloat(percentage*100).toFixed(0);
  90. $(uploaderthis).parent().parent().find(".webuploader-pick").html(aNew+"%");
  91. if(percentage==1){
  92. $(uploaderthis).parent().parent().find(".webuploader-pick").html('保存中...');
  93. }
  94. });
  95. uploader.on('uploadSuccess', function( file, response ) {
  96. uploader.removeFile( file );
  97. if(response.code == 200){
  98. $(uploaderthis).parent().parent().find(".input-uploadfile").val(response.fileurl);
  99. $(uploaderthis).parent().parent().find(".webuploader-pick").html('上传完成');
  100. }else{
  101. layer.msg(response.message, {icon: 2});
  102. $(uploaderthis).parent().parent().find(".webuploader-pick").html('上传失败');
  103. }
  104. });
  105. }
  106. webUpload{$id}();
  107. </script>
  108. EOF;
  109. return $html;
  110. }
  111. /**
  112. * 单个文件上传
  113. * @param $folder
  114. * @param string $positions
  115. * @param array $option
  116. */
  117. public function singles($folder, $id, $name = "data[file]", $file = "", $id_order , $token,$option = [], $param = [])
  118. {
  119. $file_types = 'jpg|jpeg|gif|png|bmp|doc|docx|xls|xlsx|ppt|htm|html|php|txt|zip|rar|gz|bz2|pdf';
  120. $option['position'] = isset($option['position']) ? $option['position'] : "alioss";
  121. $option['placeholder'] = isset($option['placeholder']) ? $option['placeholder'] : "";
  122. $option['button_class'] = isset($option['button_class']) ? $option['button_class'] : "";
  123. //扩展参数
  124. $extParam = '';
  125. if($param){
  126. foreach($param AS $key => $val){
  127. $extParam .= $key . ":" . $val . ',';
  128. }
  129. }
  130. $token = csrf_token();
  131. $html = <<<EOF
  132. <link href="/base/webuploader/webuploader.css" rel="stylesheet">
  133. <script src="/base/webuploader/webuploader.min.js"></script>
  134. <div id="{$id_order}">
  135. <input type="hidden" class="form-control input-uploadfile" id="pdfUpload" value="{$file}" name="{$name}" placeholder="{$option['placeholder']}" readonly>
  136. <button id="{$id}" class="btn btn-primary {$option['button_class']}">上传</button>
  137. </div>
  138. <script type="text/javascript">
  139. function webUpload{$id}() {
  140. var uploaderthis="#{$id}";
  141. var uploader = WebUploader.create({
  142. auto: true,
  143. pick: {
  144. id: uploaderthis,
  145. multiple: false,
  146. },
  147. accept: {
  148. title: 'Files',
  149. extensions: "{$file_types}",
  150. },
  151. swf: "/base/webuploader/uploader.swf",
  152. server: "/admin/Base/Attachment/webupload",
  153. fileNumLimit: 300,
  154. fileSizeLimit: 20 * 1024 * 1024,
  155. fileSingleSizeLimit: 10 * 1024 * 1024,
  156. });
  157. uploader.option("formData", {
  158. $extParam
  159. _time: Math.random(),
  160. _token : "{$token}",
  161. _position : "{$option['position']}",
  162. elementid : "",
  163. file_type : "file",
  164. folder : "{$folder}"
  165. });
  166. uploader.on("error",function(type){
  167. if(type=='F_EXCEED_SIZE'){
  168. layer.msg("上传的文件不大于10MB", {icon: 2});
  169. return false;
  170. }else if(type=="Q_TYPE_DENIED"){
  171. layer.msg("请上传格式正确的文件", {icon: 2});
  172. return false;
  173. }else {
  174. layer.msg("服务器繁忙请稍候再试", {icon: 2});
  175. return false;
  176. }
  177. });
  178. uploader.on("uploadProgress",function(file,percentage){
  179. var re = /([0-9]+\.[0-9]{2})[0-9]*/;
  180. aNew = parseFloat(percentage*100).toFixed(0);
  181. $(uploaderthis).parent().parent().find(".webuploader-pick").html(aNew+"%");
  182. if(percentage==1){
  183. $(uploaderthis).parent().parent().find(".webuploader-pick").html('保存中...');
  184. }
  185. });
  186. uploader.on('uploadSuccess', function( file, response ) {
  187. uploader.removeFile( file );
  188. if(response.code == 200){
  189. $(uploaderthis).parent().parent().find(".input-uploadfile").val(response.fileurl);
  190. $(uploaderthis).parent().parent().find(".webuploader-pick").html('上传完成');
  191. }else{
  192. layer.msg(response.message, {icon: 2});
  193. $(uploaderthis).parent().parent().find(".webuploader-pick").html('上传失败');
  194. }
  195. var token = "<?php echo csrf_token(); ?>";
  196. alert(token);
  197. });
  198. }
  199. webUpload{$id}();
  200. </script>
  201. EOF;
  202. return $html;
  203. }
  204. public function single2($folder, $id, $name="data", $file="", $option=[]){
  205. $folder = urlencode($folder);
  206. $imgHtml = "";
  207. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  208. if(!$option['callback'] && !empty($file)) {
  209. // $imgHtml .= " <li><em class=\"close\" onclick='$(this).parent().remove()'>×</em>
  210. // <a href='{$file}' class='cc_file' target='_blank'> <img src=\"/base/plugins/imguploader/img/file.jpg\" alt=\"{$file}\"></a>
  211. // <p class=\"rate\" style=\"display: none;\"><span style=\"width: 100%;\"></span></p>
  212. // <p class=\"yes\" style=\"display: none;\"></p>
  213. // <p class=\"no\"></p>
  214. // <input type=\"hidden\" name=\"{$name}\" value=\"{$file}\">
  215. // </li>";
  216. $iconImage = in_array(fileExt($img['url']), ['jpg', 'png' , 'gif' , 'jpeg' , 'bmp']) ? " <div class='image'><img src=\"{$img['url']}\" alt= /></div>" : "<div class='icon'><i class='fa fa-file'></i></div>";
  217. $imgHtml .="<li >
  218. <div class=\"file\">
  219. <span class=\"corner\"></span>
  220. {$iconImage}
  221. <div class=\"file-name\">
  222. <p>{$img['alt']}</p>
  223. <small></small>
  224. </div>
  225. </div>
  226. <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>
  227. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$img['alt']}\">
  228. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$img['url']}\">
  229. </li>";
  230. }
  231. $html = <<<EOF
  232. <script type="text/javascript" src="/base/plugins/imguploader/uploader.js"></script>
  233. <div class="layout_upload">
  234. <ul class="ullit">
  235. $imgHtml
  236. <li>
  237. <a class="layout_upload_but" id="$id">&nbsp;</a>
  238. </li>
  239. <div class="ov_h"></div>
  240. </ul>
  241. </div>
  242. <script type="text/javascript">
  243. /*
  244. UploaderPick:"#", //绑定按钮id
  245. UploaderUrl:"", //百度插件地址
  246. UploaderServer:"", //上传api
  247. UploaderMax:1 //现在最大上传个数
  248. UploadHiddenField:"" //隐藏域name
  249. */
  250. new uploadFile({
  251. UploaderPick:"#$id",
  252. UploaderMax:0,
  253. UploadHiddenField:"$name",
  254. UploaderServer:"/api/attachment/webupload?elementid=&folder=$folder&_time=" + Math.random(),
  255. UploaderSingle:true
  256. });
  257. </script>
  258. EOF;
  259. return $html;
  260. }
  261. public function multi2($folder, $id, $name="data[image]", $files=[], $option=[]){
  262. $folder = urlencode($folder);
  263. $imgHtml = "";
  264. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  265. $option['max'] = isset($option['max']) ? $option['max'] : 200;
  266. $option['max'] = $option['max']-count($files);
  267. if(!$option['callback'] && !empty($files)) {
  268. foreach($files as $key=>$val) {
  269. if(is_string($val)) {
  270. $file['url'] = $val;
  271. $file['alt'] = '';
  272. }else{
  273. $file = $val;
  274. }
  275. /*$imgHtml .= " <li><em class=\"close\" onclick='$(this).parent().remove()'>×</em>
  276. <a href='{$file['url']}' title='{$file['alt']}' target='_blank'> <img src=\"/base/plugins/imguploader/img/file.jpg\" alt=\"{$file['alt']}\"></a>
  277. <p class=\"rate\" style=\"display: none;\"><span style=\"width: 100%;\"></span></p>
  278. <p class=\"yes\" style=\"display: none;\"></p>
  279. <p class=\"no\"></p>
  280. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$file['alt']}\">
  281. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$file['url']}\">
  282. </li>";*/
  283. $iconImage = in_array(fileExt($file['url']), ['jpg', 'png' , 'gif' , 'jpeg' , 'bmp']) ? " <div class='image'><img src=\"{$file['url']}\" alt= /></div>" : "<div class='icon'><i class='fa fa-file'></i></div>";
  284. $imgHtml .="<li >
  285. <div class=\"file\">
  286. <span class=\"corner\"></span>
  287. {$iconImage}
  288. <div class=\"file-name\">
  289. <p>{$file['alt']}</p>
  290. <small></small>
  291. </div>
  292. </div>
  293. <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>
  294. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$file['alt']}\">
  295. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$file['url']}\">
  296. </li>";
  297. }
  298. }
  299. $html = <<<EOF
  300. <script type="text/javascript" src="/base/plugins/imguploader/uploader.js"></script>
  301. <div class="layout_upload">
  302. <ul class="ullit">
  303. $imgHtml
  304. <li>
  305. <a class="layout_upload_but" id="$id">&nbsp;</a>
  306. </li>
  307. <div class="ov_h"></div>
  308. </ul>
  309. </div>
  310. <script type="text/javascript">
  311. /*
  312. UploaderPick:"#", //绑定按钮id
  313. UploaderUrl:"", //百度插件地址
  314. UploaderServer:"", //上传api
  315. UploaderMax:5 //现在最大上传个数
  316. UploadHiddenField:"" //隐藏域name
  317. */
  318. new uploadFile({
  319. UploaderPick:"#$id",
  320. UploaderMax:{$option['max']},
  321. UploaderServer:"/api/attachment/webupload?elementid=&folder=$folder&_time=" + Math.random(),
  322. UploadHiddenField:"$name"
  323. });
  324. </script>
  325. EOF;
  326. return $html;
  327. }
  328. }