Upload.html 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>上传文件</title>
  6. <link rel="stylesheet" type="text/css" href="../Js/layui/font/iconfont.css" />
  7. <link rel="stylesheet" type="text/css" href="../Js/layui/css/layui.css" />
  8. <style>
  9. body {
  10. font-family: 'Microsoft YaHei';
  11. }
  12. .hidden {
  13. display: none;
  14. }
  15. .middle-align {
  16. vertical-align: middle;
  17. text-align: center;
  18. }
  19. .icon-shangchuan1 {
  20. font-size: 50px;
  21. }
  22. .layui-footer {
  23. background-color: transparent !important;
  24. left: 0 !important;
  25. vertical-align: middle !important;
  26. text-align: center !important;
  27. padding: 10px !important;
  28. }
  29. .layui-form {
  30. padding: 15px !important;
  31. }
  32. p {
  33. padding: 5px;
  34. }
  35. .layui-form-label {
  36. text-align: left !important;
  37. }
  38. .layui-form {
  39. padding: 0px !important;
  40. }
  41. .layui-form-item {
  42. margin: 15px !important;
  43. }
  44. .webuploader-element-invisible {
  45. display:none;
  46. }
  47. .fileinfo {
  48. padding: 10px;
  49. }
  50. </style>
  51. </head>
  52. <body>
  53. <script src="../js/jquery-3.3.1.min.js"></script>
  54. <script src="../js/webuploader/webuploader.js"></script>
  55. <script src="../Js/layui/layui.all.js"></script>
  56. <script src="../Js/Common.js"></script>
  57. <form class="layui-form middle-align" onkeydown="if(event.keyCode==13)return false;">
  58. <div class="layui-form-item layui-layout-admin middle-align">
  59. <div>
  60. <div class="layui-upload-drag middle-align" id="uploadFile">
  61. <i class="iconfont icon-shangchuan1"></i>
  62. <p id="uploadTips"></p>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="fileinfo hidden">
  67. <p id="uploadingTips"></p>
  68. <p id="fileName"></p>
  69. <p id="fileSize"></p>
  70. </div>
  71. <div class="fileinfo hidden">
  72. <div class="layui-progress" id="uploadProgress" lay-filter="uploadProgress" lay-showpercent="true">
  73. <div class="layui-progress-bar layui-bg-blue" lay-percent=""></div>
  74. </div>
  75. </div>
  76. </div>
  77. <div class="layui-form-item layui-layout-admin">
  78. <a id="back" class="layui-btn layui-btn-primary"></a>
  79. </div>
  80. </form>
  81. <script>
  82. var intervalHandle;
  83. var param = layui.getParams();
  84. var currId = parseInt(param.currId);
  85. var currUser = param.currUser;
  86. layui.$("#uploadTips").text(layui.translater("UploadTips"));
  87. layui.$("#uploadingTips").text(layui.translater("Uploading"));
  88. layui.$("#back").text(layui.translater("Cancel"));
  89. var fileSize;
  90. var fileMd5;
  91. var uploadChunks;
  92. var GUID = WebUploader.Base.guid();//一个GUID
  93. WebUploader.Uploader.register({
  94. "before-send": "beforeSend"
  95. }, {
  96. beforeSend: function (block) {
  97. var task = WebUploader.Deferred();
  98. if (uploadChunks != null && (uploadChunks.indexOf("," + block.chunk + ",") > -1 || uploadChunks.indexOf("%%%") > -1)) {
  99. task.reject();
  100. } else {
  101. task.resolve();
  102. }
  103. return task.promise();
  104. }
  105. });
  106. //请求服务器查询有哪些分片已上传
  107. var uploader = WebUploader.create({
  108. swf: '../js/webuploader/Uploader.swf',
  109. server: '/CloudDisk/Upload/UploadFile',
  110. pick: '#uploadFile',
  111. dnd: 'body',//设置dnd为整个页面
  112. resize: false,
  113. chunked: true,//开始分片上传
  114. threads: 4,
  115. chunkSize: 4096000,//每一片的大小
  116. auto: false,
  117. extensions: 'zip',
  118. formData: {
  119. guid: GUID
  120. }
  121. });
  122. uploader.on('fileQueued', function (file) {
  123. fileSize = (parseFloat(file.size) / 1048576).toFixed(2);
  124. if (fileSize > 500) {
  125. window.top.layer.alert(layui.translater("FileSizeAstrict") + "500M");
  126. return false;
  127. }
  128. layui.$("#uploadFile").addClass("hidden");
  129. layui.$(".fileinfo").removeClass("hidden")
  130. layui.$("#fileName").text(layui.translater("FileName") + ":\r\n" + file.name);
  131. layui.$("#fileSize").text(layui.translater("FileSize") + ":\r\n" + fileSize + "M")
  132. layui.element.progress('uploadProgress', '1%');
  133. layui.element.render();
  134. //获取文件MD5值
  135. uploader.md5File(file, 0, 10 * 1024 * 1024)
  136. // 完成
  137. .then(function (md5) {
  138. fileMd5 = md5;
  139. uploader.options.formData.fileMd5 = md5;
  140. if (uploadChunks == null || uploadChunks.indexOf(file.name + ":") == -1) {
  141. layui.$.post("/CloudDisk/Upload/CheckUpload", { "fileMd5": fileMd5 }, function (res) {
  142. uploadChunks = file.name + ":," + res.chunks + ",";
  143. uploader.upload();
  144. intervalHandle = self.setInterval(function () {
  145. layui.$.post("/CloudDisk/Upload/GetUploadProgress", { "guid": GUID }, function (prog) {
  146. var progressNumber = Number(prog.progress);
  147. if (progressNumber > 0) {
  148. $("#progressText").text((0.59 * progressNumber + 40).toFixed(0) + '%');
  149. layui.element.progress('uploadProgress', (0.59 * progressNumber + 40).toFixed(0) + '%');
  150. }
  151. });
  152. }, 3000);
  153. });
  154. }
  155. });
  156. });
  157. uploader.on('uploadProgress', function (file, percentage) {
  158. $("#progressText").text(Math.floor(percentage * 40).toFixed(0) + '%');
  159. layui.element.progress('uploadProgress', Math.floor(percentage * 40).toFixed(0) + '%');
  160. });
  161. uploader.on('uploadSuccess', function (file) {
  162. if (uploadChunks.indexOf("%%%") > -1) {
  163. window.top.layer.alert(layui.translater("FileExists"));
  164. layui.$("#back").click();
  165. return false;
  166. }
  167. else {
  168. layui.$.post('/CloudDisk/Upload/Merge', { fileMd5, guid: GUID, fileName: file.name, currUser, currId, fileSize }, function (res) {
  169. layui.element.progress('uploadProgress', '100%');
  170. layui.$("#back").click();
  171. return false;
  172. });
  173. }
  174. });
  175. uploader.on('uploadError', function () {
  176. layui.$("#back").click();
  177. window.top.layui.layer.alert(layui.translater("UploadFaild"));
  178. });
  179. layui.elementOn("#back", "click", function () {
  180. if (parent.loadPage) {
  181. parent.loadPage();
  182. }
  183. var index = parent.layer.getFrameIndex(window.name);
  184. parent.layer.close(index);
  185. });
  186. </script>
  187. </body>
  188. </html>