FileUpload.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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';
  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" 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>
  42. </div>
  43. </div>
  44. <script type="text/javascript">
  45. function webUpload{$id}() {
  46. var uploaderthis="#{$id}";
  47. var uploader = WebUploader.create({
  48. auto: true,
  49. pick: {
  50. id: uploaderthis,
  51. multiple: false,
  52. },
  53. accept: {
  54. title: 'Files',
  55. extensions: "{$file_types}",
  56. },
  57. swf: "/base/webuploader/uploader.swf",
  58. server: "/api/attachment/webupload",
  59. fileNumLimit: 300,
  60. fileSizeLimit: 20 * 1024 * 1024,
  61. fileSingleSizeLimit: 10 * 1024 * 1024,
  62. });
  63. uploader.option("formData", {
  64. $extParam
  65. _time: Math.random(),
  66. _token : "{$token}",
  67. _position : "{$option['position']}",
  68. elementid : "",
  69. file_type : "file",
  70. folder : "{$folder}"
  71. });
  72. uploader.on("error",function(type){
  73. if(type=='F_EXCEED_SIZE'){
  74. layer.msg("上传的文件不大于10MB", {icon: 2});
  75. return false;
  76. }else if(type=="Q_TYPE_DENIED"){
  77. layer.msg("请上传格式正确的文件", {icon: 2});
  78. return false;
  79. }else {
  80. layer.msg("服务器繁忙请稍候再试", {icon: 2});
  81. return false;
  82. }
  83. });
  84. uploader.on("uploadProgress",function(file,percentage){
  85. var re = /([0-9]+\.[0-9]{2})[0-9]*/;
  86. aNew = parseFloat(percentage*100).toFixed(0);
  87. $(uploaderthis).parent().parent().find(".webuploader-pick").html(aNew+"%");
  88. if(percentage==1){
  89. $(uploaderthis).parent().parent().find(".webuploader-pick").html('保存中...');
  90. }
  91. });
  92. uploader.on('uploadSuccess', function( file, response ) {
  93. uploader.removeFile( file );
  94. if(response.code == 200){
  95. $(uploaderthis).parent().parent().find(".input-uploadfile").val(response.fileurl);
  96. $(uploaderthis).parent().parent().find(".webuploader-pick").html('上传完成');
  97. }else{
  98. layer.msg(response.message, {icon: 2});
  99. $(uploaderthis).parent().parent().find(".webuploader-pick").html('上传失败');
  100. }
  101. });
  102. }
  103. webUpload{$id}();
  104. </script>
  105. EOF;
  106. return $html;
  107. }
  108. public function single2($folder, $id, $name="data", $file="", $option=[]){
  109. $folder = urlencode($folder);
  110. $imgHtml = "";
  111. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  112. if(!$option['callback'] && !empty($file)) {
  113. // $imgHtml .= " <li><em class=\"close\" onclick='$(this).parent().remove()'>×</em>
  114. // <a href='{$file}' class='cc_file' target='_blank'> <img src=\"/base/plugins/imguploader/img/file.jpg\" alt=\"{$file}\"></a>
  115. // <p class=\"rate\" style=\"display: none;\"><span style=\"width: 100%;\"></span></p>
  116. // <p class=\"yes\" style=\"display: none;\"></p>
  117. // <p class=\"no\"></p>
  118. // <input type=\"hidden\" name=\"{$name}\" value=\"{$file}\">
  119. // </li>";
  120. $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>";
  121. $imgHtml .="<li >
  122. <div class=\"file\">
  123. <span class=\"corner\"></span>
  124. {$iconImage}
  125. <div class=\"file-name\">
  126. <p>{$img['alt']}</p>
  127. <small></small>
  128. </div>
  129. </div>
  130. <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>
  131. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$img['alt']}\">
  132. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$img['url']}\">
  133. </li>";
  134. }
  135. $html = <<<EOF
  136. <script type="text/javascript" src="/base/plugins/imguploader/uploader.js"></script>
  137. <div class="layout_upload">
  138. <ul class="ullit">
  139. $imgHtml
  140. <li>
  141. <a class="layout_upload_but" id="$id">&nbsp;</a>
  142. </li>
  143. <div class="ov_h"></div>
  144. </ul>
  145. </div>
  146. <script type="text/javascript">
  147. /*
  148. UploaderPick:"#", //绑定按钮id
  149. UploaderUrl:"", //百度插件地址
  150. UploaderServer:"", //上传api
  151. UploaderMax:1 //现在最大上传个数
  152. UploadHiddenField:"" //隐藏域name
  153. */
  154. new uploadFile({
  155. UploaderPick:"#$id",
  156. UploaderMax:0,
  157. UploadHiddenField:"$name",
  158. UploaderServer:"/api/attachment/webupload?elementid=&folder=$folder&_time=" + Math.random(),
  159. UploaderSingle:true
  160. });
  161. </script>
  162. EOF;
  163. return $html;
  164. }
  165. public function multi2($folder, $id, $name="data[image]", $files=[], $option=[]){
  166. $folder = urlencode($folder);
  167. $imgHtml = "";
  168. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  169. $option['max'] = isset($option['max']) ? $option['max'] : 200;
  170. $option['max'] = $option['max']-count($files);
  171. if(!$option['callback'] && !empty($files)) {
  172. foreach($files as $key=>$val) {
  173. if(is_string($val)) {
  174. $file['url'] = $val;
  175. $file['alt'] = '';
  176. }else{
  177. $file = $val;
  178. }
  179. /*$imgHtml .= " <li><em class=\"close\" onclick='$(this).parent().remove()'>×</em>
  180. <a href='{$file['url']}' title='{$file['alt']}' target='_blank'> <img src=\"/base/plugins/imguploader/img/file.jpg\" alt=\"{$file['alt']}\"></a>
  181. <p class=\"rate\" style=\"display: none;\"><span style=\"width: 100%;\"></span></p>
  182. <p class=\"yes\" style=\"display: none;\"></p>
  183. <p class=\"no\"></p>
  184. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$file['alt']}\">
  185. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$file['url']}\">
  186. </li>";*/
  187. $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>";
  188. $imgHtml .="<li >
  189. <div class=\"file\">
  190. <span class=\"corner\"></span>
  191. {$iconImage}
  192. <div class=\"file-name\">
  193. <p>{$file['alt']}</p>
  194. <small></small>
  195. </div>
  196. </div>
  197. <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>
  198. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$file['alt']}\">
  199. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$file['url']}\">
  200. </li>";
  201. }
  202. }
  203. $html = <<<EOF
  204. <script type="text/javascript" src="/base/plugins/imguploader/uploader.js"></script>
  205. <div class="layout_upload">
  206. <ul class="ullit">
  207. $imgHtml
  208. <li>
  209. <a class="layout_upload_but" id="$id">&nbsp;</a>
  210. </li>
  211. <div class="ov_h"></div>
  212. </ul>
  213. </div>
  214. <script type="text/javascript">
  215. /*
  216. UploaderPick:"#", //绑定按钮id
  217. UploaderUrl:"", //百度插件地址
  218. UploaderServer:"", //上传api
  219. UploaderMax:5 //现在最大上传个数
  220. UploadHiddenField:"" //隐藏域name
  221. */
  222. new uploadFile({
  223. UploaderPick:"#$id",
  224. UploaderMax:{$option['max']},
  225. UploaderServer:"/api/attachment/webupload?elementid=&folder=$folder&_time=" + Math.random(),
  226. UploadHiddenField:"$name"
  227. });
  228. </script>
  229. EOF;
  230. return $html;
  231. }
  232. }