upload.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  6. <title>文件上传模块 - layui</title>
  7. <link rel="stylesheet" href="../src/css/layui.css">
  8. <style>
  9. body{padding: 50px 100px;}
  10. .layui-upload-img{width: 92px; height: 92px; margin: 0 10px 10px 0;}
  11. hr{margin: 30px 0;}
  12. </style>
  13. </head>
  14. <body>
  15. <div class="layui-upload">
  16. <button type="button" class="layui-btn" id="test1">上传图片</button>
  17. <div class="layui-upload-list">
  18. <img class="layui-upload-img" src="" id="demo1">
  19. <p id="demoText"></p>
  20. </div>
  21. </div>
  22. <hr>
  23. <div class="layui-upload">
  24. <button type="button" class="layui-btn" id="test2">多图片上传</button>
  25. <div class="layui-upload-list" id="demo2"></div>
  26. </div>
  27. <hr>
  28. <div class="layui-upload">
  29. <button type="button" class="layui-btn layui-btn-normal" id="testList">选择多文件</button>
  30. <div class="layui-upload-list">
  31. <table class="layui-table">
  32. <thead>
  33. <th>文件名</th>
  34. <th>大小</th>
  35. <th>状态</th>
  36. <th>操作</th>
  37. </thead>
  38. <tbody id="demoList"></tbody>
  39. </table>
  40. </div>
  41. <button type="button" class="layui-btn" id="testListAction">开始上传</button>
  42. </div>
  43. <hr>
  44. <button type="button" class="layui-btn test333" lay-data="{size:10,url:'a'}" id="test3"><i class="layui-icon">&#xe67c;</i>上传文件</button>
  45. <button type="button" class="layui-btn layui-btn-primary test333" lay-data="{size:20,url:'b'}" id="test33"><i class="layui-icon">&#xe67c;</i>换个样式</button>
  46. <button type="button" class="layui-btn" id="test4"><i class="layui-icon">&#xe67c;</i>上传视频</button>
  47. <button type="button" class="layui-btn" id="test5"><i class="layui-icon">&#xe67c;</i>上传音频</button>
  48. <hr>
  49. <button class="layui-btn testm" lay-data="{url: '/a/'}">参数设在元素上</button>
  50. <button class="layui-btn testm" lay-data="{url: '/b/', accept: 'file',size:5}">参数设在元素上</button>
  51. <hr>
  52. <div class="layui-upload">
  53. <button type="button" class="layui-btn layui-btn-normal" id="test6">选择文件</button>
  54. <button type="button" class="layui-btn" id="test7">开始上传</button>
  55. </div>
  56. <hr><br>
  57. <div class="layui-upload-drag" id="test9">
  58. <i class="layui-icon">&#xe67c;</i>
  59. <p>点击上传,或将文件拖拽到此处</p>
  60. </div>
  61. <hr><br>
  62. 绑定原始文件域:<input type="file" name="file" id="test8">
  63. <script src="../src/layui.js"></script>
  64. <script>
  65. layui.use('upload', function(){
  66. var $ = layui.jquery
  67. ,upload = layui.upload;
  68. var uploadInst = upload.render({
  69. elem: '#test1'
  70. ,url: '/upload/'
  71. ,size: 60 //限制文件大小,单位 KB
  72. ,before: function(obj){
  73. //预读本地文件示例,不支持ie8
  74. obj.preview(function(index, file, result){
  75. $('#demo1').attr('src', result); //图片链接(base64)
  76. });
  77. }
  78. ,done: function(res){
  79. //如果上传失败
  80. if(res.code > 0){
  81. return layer.msg('上传失败');
  82. }
  83. //上传成功
  84. }
  85. ,error: function(){
  86. //演示失败状态,并实现重传
  87. var demoText = $('#demoText');
  88. demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
  89. demoText.find('.demo-reload').on('click', function(){
  90. uploadInst.upload();
  91. });
  92. }
  93. });
  94. upload.render({
  95. elem: '#test2'
  96. ,url: ''
  97. ,multiple: true
  98. ,size: 1024
  99. ,before: function(obj){
  100. //预读本地文件示例,不支持ie8
  101. obj.preview(function(index, file, result){
  102. $('#demo2').append('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img">')
  103. });
  104. }
  105. ,done: function(res){
  106. //上传完毕
  107. }
  108. });
  109. //演示多文件列表
  110. var demoListView = $('#demoList');
  111. var uploadListIns = upload.render({
  112. elem: '#testList'
  113. ,url: ''
  114. ,accept: 'file'
  115. ,multiple: true
  116. ,auto: false
  117. ,bindAction: '#testListAction'
  118. ,choose: function(obj){
  119. var files = obj.pushFile(); //将每次选择的文件追加到文件队列
  120. //读取本地文件
  121. obj.preview(function(index, file, result){
  122. var tr = $(['<tr id="upload-'+ index +'">'
  123. ,'<td>'+ file.name +'</td>'
  124. ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
  125. ,'<td>等待上传</td>'
  126. ,'<td>'
  127. ,'<button class="layui-btn layui-btn-mini demo-reload layui-hide">重传</button>'
  128. ,'<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">删除</button>'
  129. ,'</td>'
  130. ,'</tr>'].join(''));
  131. //单个重传
  132. tr.find('.demo-reload').on('click', function(){
  133. obj.upload(index, file);
  134. });
  135. //删除
  136. tr.find('.demo-delete').on('click', function(){
  137. delete files[index]; //删除对应的文件
  138. tr.remove();
  139. });
  140. demoListView.append(tr);
  141. });
  142. }
  143. ,done: function(res, index, upload){
  144. if(res.code == 0){ //上传成功
  145. var tr = demoListView.find('tr#upload-'+ index)
  146. ,tds = tr.children();
  147. tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
  148. tds.eq(3).html(''); //清空操作
  149. delete files[index]; //删除文件队列已经上传成功的文件
  150. return;
  151. }
  152. this.error(index, upload);
  153. }
  154. ,error: function(index, upload){
  155. var tr = demoListView.find('tr#upload-'+ index)
  156. ,tds = tr.children();
  157. tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
  158. tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
  159. }
  160. });
  161. upload.render({
  162. elem: '.test333'
  163. ,url: 'a'
  164. ,accept: 'file'
  165. ,before: function(obj){
  166. console.log(this.item);
  167. }
  168. ,done: function(res){
  169. console.log(res)
  170. }
  171. });
  172. upload.render({
  173. elem: '.testm'
  174. ,done: function(res, index, upload){
  175. //获取当前触发上传的元素,一般用于 elem 绑定 class 的情况,注意:此乃 layui 2.1.0 新增
  176. var item = this.item;
  177. }
  178. })
  179. /*
  180. upload.render({
  181. elem: '#test33'
  182. ,url: ''
  183. ,accept: 'file'
  184. ,done: function(res){
  185. console.log(res)
  186. }
  187. });*/
  188. upload.render({
  189. elem: '#test4'
  190. ,url: ''
  191. ,accept: 'video'
  192. ,done: function(res){
  193. console.log(res)
  194. }
  195. });
  196. upload.render({
  197. elem: '#test5'
  198. ,url: ''
  199. ,accept: 'audio'
  200. ,done: function(res){
  201. console.log(res)
  202. }
  203. });
  204. upload.render({
  205. elem: '#test6'
  206. ,url: ''
  207. ,auto: false
  208. //,multiple: true
  209. ,bindAction: '#test7'
  210. ,done: function(res){
  211. console.log(res)
  212. }
  213. });
  214. upload.render({
  215. elem: '#test8'
  216. ,url: ''
  217. ,done: function(res){
  218. console.log(res)
  219. }
  220. });
  221. upload.render({
  222. elem: '#test9'
  223. ,url: ''
  224. ,done: function(res){
  225. console.log(res)
  226. }
  227. });
  228. });
  229. </script>
  230. </body>
  231. </html>