ImgUpload.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  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. use App\Models\CmsLinkModel;
  11. class ImgUpload {
  12. /**
  13. * 单个图片上传
  14. * @param $folder
  15. * @param string $position
  16. * @param array $option
  17. */
  18. public function single1($folder,$id,$name="data[image]",$img ="",$option=[]) {
  19. $file_types = 'jpg|jpeg|gif|png|bmp';
  20. if($img) {
  21. $style = "display:block;";
  22. }else{
  23. $style = "display:none;";
  24. }
  25. $option['button_class'] = isset($option['button_class']) ? $option['button_class'] : "";
  26. $option['input_data'] = isset($option['input_data']) ? $option['input_data'] : "";
  27. $option['div_class'] = isset($option['div_class']) ? $option['div_class'] : "spiner-example";
  28. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  29. $option['watermark'] = isset($option['watermark']) ? $option['watermark'] : "";
  30. $imgHtml = "";
  31. if(!$option['callback']) {
  32. $imgHtml = " <div class=\"{$option['div_class']}\" style=\"$style\">
  33. <input class=\"upimg_hidden\" {$option['input_data']} type=\"hidden\" value=\"$img\" name=\"$name\"/>
  34. <img src=\"$img\" class=\"upimg\" style=\"\" />
  35. <i class=\"fa fa-remove \"></i>
  36. <div class=\"sk-spinner sk-spinner-wave\" style=\"display:none\">
  37. <div class=\"sk-rect1\"></div>
  38. <div class=\"sk-rect2\"></div>
  39. <div class=\"sk-rect3\"></div>
  40. <div class=\"sk-rect4\"></div>
  41. <div class=\"sk-rect5\"></div>
  42. <span>50%</span>
  43. </div>
  44. </div>";
  45. }
  46. $token = csrf_token();
  47. $html = <<<EOF
  48. <link href="/base/webuploader/webuploader.css" rel="stylesheet">
  49. <script src="/base/webuploader/webuploader.min.js"></script>
  50. <div class="WebUploader">
  51. <div class="WebUploader_button">
  52. <div id="$id" class="{$option['button_class']}"/>上传图片</div>
  53. </div>
  54. $imgHtml
  55. </div>
  56. <script type="text/javascript">
  57. function webUpload$id() {
  58. var uploaderthis="#$id";
  59. $(uploaderthis).parent().parent().find(".fa-remove").click(function() {
  60. $(this).parent().hide();
  61. $(this).parent().find(".upimg_hidden").val('');
  62. $(this).parent().find(".upimg").attr('src','');
  63. });
  64. var uploader = WebUploader.create({
  65. auto: true,
  66. pick: {
  67. id: uploaderthis,
  68. multiple: false,
  69. },
  70. accept: {
  71. title: 'Images',
  72. extensions: 'gif,jpg,jpeg,bmp,png',
  73. mimeTypes: 'image/*'
  74. },
  75. swf: "/base/webuploader/uploader.swf",
  76. server: "/admin/Base/Attachment/webupload",
  77. fileNumLimit: 300,
  78. fileSizeLimit: 10 * 1024 * 1024,
  79. fileSingleSizeLimit: 10 * 1024 * 1024,
  80. });
  81. uploader.option("formData", {
  82. _token : "$token",
  83. elementid : "",
  84. folder : "$folder",
  85. watermark : "{$option['watermark']}",
  86. _time: Math.random()
  87. });
  88. uploader.on("error",function(type){
  89. //仅支持JPG、GIF、PNG、JPEG、BMP格式,
  90. if(type=='F_EXCEED_SIZE'){
  91. layer.msg("上传的图片不大于5MB", {icon: 2});
  92. return false;
  93. }else if(type=="Q_TYPE_DENIED"){
  94. layer.msg("请上传JPG、GIF、PNG、JPEG、BMP格式", {icon: 2});
  95. return false;
  96. }else {
  97. layer.msg("服务器繁忙请稍候再试", {icon: 2});
  98. return false;
  99. }
  100. });
  101. uploader.on("uploadProgress",function(file,percentage){
  102. var re = /([0-9]+\.[0-9]{2})[0-9]*/;
  103. aNew = parseFloat(percentage*100).toFixed(0);
  104. $(uploaderthis).parent().parent().find(".spiner-example").show().find(".sk-spinner").show().find("span").html(aNew+"%");
  105. if(percentage==1){
  106. $(uploaderthis).parent().parent().find(".sk-spinner").find("span").html('上传完成,加载图片...');
  107. // $(uploaderthis).parent().parent().find(".sk-spinner").hide();
  108. }
  109. });
  110. uploader.on('uploadSuccess', function( file, response ) {
  111. uploader.removeFile( file );
  112. if(response.code == 200){
  113. $(uploaderthis).parent().parent().find(".upimg").attr("src",response.fileurl + "?t=" + Math.random()).load(function() {
  114. $(uploaderthis).parent().parent().find(".sk-spinner").hide();
  115. });
  116. $(uploaderthis).parent().parent().find(".upimg_hidden").val(response.fileurl);
  117. }else{
  118. layer.msg(response.message, {icon: 2});
  119. $(uploaderthis).parent().parent().find(".sk-spinner").hide();
  120. $(uploaderthis).parent().parent().find(".spiner-example").hide();
  121. }
  122. });
  123. }
  124. webUpload$id();
  125. </script>
  126. EOF;
  127. return $html;
  128. }
  129. public function single2($folder, $id, $name="data", $img1="", $option=[]){
  130. $folder = urlencode($folder);
  131. $imgHtml = "";
  132. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  133. $option['watermark'] = isset($option['watermark']) ? $option['watermark'] : "";
  134. if(!$option['callback'] && !empty($img1)) {
  135. if(!is_array($img1)){
  136. $img['url'] = $img1;
  137. $img['alt'] = '';
  138. }
  139. /*$imgHtml .= " <li><em class=\"close\" onclick='$(this).parent().remove()'>×</em>
  140. <img src=\"{$img}\" alt=\"{$img}\">
  141. <p class=\"rate\" style=\"display: none;\"><span style=\"width: 100%;\"></span></p>
  142. <p class=\"yes\" style=\"display: none;\"></p>
  143. <p class=\"no\"></p>
  144. <input type=\"hidden\" name=\"{$name}\" value=\"{$img}\">
  145. </li>";*/
  146. $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>";
  147. $imgHtml .="<li >
  148. <div class=\"file\">
  149. <span class=\"corner\"></span>
  150. {$iconImage}
  151. <div class=\"file-name\">
  152. <p>{$img['alt']}</p>
  153. <small></small>
  154. </div>
  155. </div>
  156. <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>
  157. <input type=\"hidden\" name=\"{$name}\" value=\"{$img['alt']}\">
  158. </li>";
  159. }
  160. $html = <<<EOF
  161. <script type="text/javascript" src="/base/plugins/imguploader/uploader.js"></script>
  162. <div class="layout_upload">
  163. <ul class="ullit">
  164. $imgHtml
  165. <li>
  166. <a class="layout_upload_but" id="$id">&nbsp;</a>
  167. </li>
  168. <div class="ov_h"></div>
  169. </ul>
  170. </div>
  171. <script type="text/javascript">
  172. /*
  173. UploaderPick:"#", //绑定按钮id
  174. UploaderUrl:"", //百度插件地址
  175. UploaderServer:"", //上传api
  176. UploaderMax:1 //现在最大上传个数
  177. UploadHiddenField:"" //隐藏域name
  178. */
  179. new upload({
  180. UploaderPick:"#$id",
  181. UploaderMax:0,
  182. UploadHiddenField:"$name",
  183. UploaderServer:"/admin/Base/Attachment/webupload?elementid=&watermark={$option['watermark']}&folder=$folder&_time=" + Math.random(),
  184. UploaderSingle:true
  185. });
  186. </script>
  187. EOF;
  188. return $html;
  189. }
  190. /**
  191. * 统一上传
  192. * @param $folder
  193. * @param $id
  194. * @param string $name
  195. * @param array $imgs
  196. * @param null $callBackFun
  197. * @return string
  198. */
  199. public function multi($folder, $id, $name="data[image]", $imgs=[], $option=[]){
  200. $file_types = 'jpg|jpeg|gif|png|bmp';
  201. $option['watermark'] = isset($option['watermark']) ? $option['watermark'] : "";
  202. $url = U("tools/uploadImg",['fooder'=>$folder,'watermark'=>$option['watermark'],'time'=>SYSTEM_TIME,'token'=>md5($folder. LOGIN_MARK_SESSION_KEY . SYSTEM_TIME)]);
  203. $imgHtml = "";
  204. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  205. if(!$option['callback'] && !empty($imgs)) {
  206. // dd($imgs);
  207. foreach($imgs as $key=>$val) {
  208. if(is_string($val)) {
  209. $img['url'] = $val;
  210. $img['alt'] = '';
  211. }else{
  212. $img = $val;
  213. }
  214. $imgHtml .= "<a class=\"fancybox\"title=\"图片\">
  215. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$img['url']}\" />
  216. <em class=\"fa fa-remove\" onclick='removeUploadImg{$id}(this)'></em>
  217. <img alt=\"image\" src=\"{$img['url']}\" />
  218. <textarea class='form-control' name='{$name}[alt][]'>{$img['alt']}</textarea>
  219. </a>";
  220. }
  221. }
  222. $herfUrl = request()->fullUrl();
  223. $html = <<<EOF
  224. <link href="/base/webuploader/webuploader.css" rel="stylesheet">
  225. <script src="/base/webuploader/webuploader.min.js"></script>
  226. <div style="clear:both">
  227. <div>
  228. <button class="btn btn-white" id="$id" type="button">开始上传</button>
  229. </div>
  230. <div id="{$id}list" class="upload-ibox-content ibox-content sortable-list ui-sortable">
  231. $imgHtml
  232. </div>
  233. <script>
  234. $(document).ready(function(){
  235. $("#{$id}list").sortable({connectWith:"#{$id}list",tag:"a",constraint:"horizontal",scroll:false}).disableSelection()});
  236. </script>
  237. </div>
  238. <script type="text/javascript">
  239. $("#$id").click(function() {
  240. layer.open({
  241. type: 2,
  242. title: '图片上传',
  243. shadeClose: true,
  244. shade: 0.8,
  245. area: ['80%', '90%'],
  246. content: '$url',
  247. btn: ['完成上传'],
  248. yes:function(index, layero){
  249. var iframeWin = window[layero.find('iframe')[0]['name']];
  250. var data = iframeWin.\$filePaths;
  251. for(i=0;i<data.length;i++) {
  252. console.log(data[i]);
  253. $("#{$id}list").append('<a class="fancybox" title="图片1">'+
  254. '<input type="hidden" name="{$name}[url][]" value="' + data[i].fileurl + '"/>' +
  255. '<em class="fa fa-remove" onclick="removeUploadImg{$id}(this)" ></em>' +
  256. '<img alt="image" src="' + data[i].fileurl + '" />' +
  257. '<textarea class="form-control" name="{$name}[alt][]">' + data[i].filename + '</textarea>' +
  258. '</a>');
  259. }
  260. layer.close(index);
  261. },
  262. end:function(index,msg){ }
  263. });
  264. });
  265. function callbackUploadImg$id(data){
  266. for(i=0;i<data.length;i++) {
  267. console.log(data[i]);
  268. $("#{$id}list").append('<a class="fancybox" title="图片1">'+
  269. '<input type="hidden" name="{$name}[url][]" value="' + data[i].fileurl + '"/>' +
  270. '<em class="fa fa-remove" onclick="removeUploadImg{$id}(this)" ></em>' +
  271. '<img alt="image" src="' + data[i].fileurl + '" />' +
  272. '<textarea class="form-control" name="{$name}[alt][]">' + data[i].filename + '</textarea>' +
  273. '</a>');
  274. }
  275. }
  276. function removeUploadImg$id(obj){
  277. $(obj).parent().remove();
  278. }
  279. </script>
  280. EOF;
  281. return $html;
  282. }
  283. public function multi2($folder, $id, $name="data[image]", $imgs=[], $option=[]){
  284. $folder = urlencode($folder);
  285. $imgHtml = "";
  286. $option['callback'] = isset($option['callback']) ? $option['callback'] : "";
  287. $option['max'] = isset($option['max']) ? $option['max'] : 200;
  288. $option['max'] = $option['max']-count($imgs);
  289. $option['watermark'] = isset($option['watermark']) ? $option['watermark'] : "";
  290. if(!$option['callback'] && !empty($imgs)) {
  291. // dd($imgs);
  292. foreach($imgs as $key=>$val) {
  293. if(is_string($val)) {
  294. $img['url'] = $val;
  295. $img['alt'] = '';
  296. }else{
  297. $img = $val;
  298. }
  299. /*$imgHtml .= " <li><em class=\"close\" onclick='$(this).parent().remove()'>×</em>
  300. <img src=\"{$img['url']}\" alt=\"{$img['alt']}\">
  301. <p class=\"rate\" style=\"display: none;\"><span style=\"width: 100%;\"></span></p>
  302. <p class=\"yes\" style=\"display: none;\"></p>
  303. <p class=\"no\"></p>
  304. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$img['alt']}\">
  305. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$img['url']}\">
  306. </li>";*/
  307. //echo in_array(fileExt($img['url']), ['jpg', 'png']) ? "<div class='icon'><i class='fa fa-file'></i></div>" :" <div class='image'><img src= alt= /></div>";
  308. $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>";
  309. $imgHtml .="<li >
  310. <div class=\"file\">
  311. <span class=\"corner\"></span>
  312. {$iconImage}
  313. <div class=\"file-name\">
  314. <p>{$img['alt']}</p>
  315. <small></small>
  316. </div>
  317. </div>
  318. <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>
  319. <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$img['alt']}\">
  320. <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$img['url']}\">
  321. </li>";
  322. }
  323. }
  324. $html = <<<EOF
  325. <script type="text/javascript" src="/base/plugins/imguploader/uploader.js"></script>
  326. <div class="layout_upload">
  327. <ul class="ullit">
  328. $imgHtml
  329. <li>
  330. <a class="layout_upload_but" id="$id">&nbsp;</a>
  331. </li>
  332. <div class="ov_h"></div>
  333. </ul>
  334. </div>
  335. <script type="text/javascript">
  336. /*
  337. UploaderPick:"#", //绑定按钮id
  338. UploaderUrl:"", //百度插件地址
  339. UploaderServer:"", //上传api
  340. UploaderMax:5 //现在最大上传个数
  341. UploadHiddenField:"" //隐藏域name
  342. */
  343. new upload({
  344. UploaderPick:"#$id",
  345. UploaderMax:{$option['max']},
  346. UploaderServer:"/admin/Base/Attachment/webupload?elementid=&watermark={$option['watermark']}&folder=$folder&_time=" + Math.random(),
  347. UploadHiddenField:"$name"
  348. });
  349. </script>
  350. EOF;
  351. return $html;
  352. }
  353. }