upload.html 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Title</title>
  8. <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
  9. <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  10. <!--[if lt IE 9]>
  11. <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
  12. <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
  13. <![endif]-->
  14. <!--引入CSS-->
  15. <link rel="stylesheet" type="text/css" href="{{rootUrl}}global/css/bootstrap.min.css">
  16. <link rel=stylesheet href="{{rootUrl}}global/css/Adminstyle.css">
  17. <!--<link rel="stylesheet" type="text/css" href="{{rootUrl}}global/css/bootstrap-theme.min.css">-->
  18. <link rel="stylesheet" type="text/css" href="{{rootUrl}}global/css/webuploader.css">
  19. <!--<link rel="stylesheet" type="text/css" href="{{rootUrl}}global/css/video.css">-->
  20. <!--引入JS-->
  21. <script src="{{rootUrl}}global/js/jquery-1.9.1.min.js"></script>
  22. <script src="{{rootUrl}}global/js/bootstrap.min.js"></script>
  23. <!--<script src="{{rootUrl}}global/js/angular.js"></script>-->
  24. <!--<script src="{{rootUrl}}global/js/video.js"></script>-->
  25. <!--<script type="text/javascript" src="{{rootUrl}}global/js/webuploader.min.js"></script>-->
  26. <script type="text/javascript" src="https://blueimp.github.io/JavaScript-MD5/js/md5.js"></script>
  27. <script src="{{rootUrl}}global/js/sha1.js"></script>
  28. <script type="text/javascript" src="{{rootUrl}}global/js/videoupload.js"></script>
  29. <!--<script src="{{rootUrl}}global/js/lib.js"></script>-->
  30. <style>
  31. .wu-example {
  32. position: relative;
  33. padding: 45px 15px 15px;
  34. margin: 15px 0;
  35. background-color: #fafafa;
  36. box-shadow: inset 0 3px 6px rgba(0, 0, 0, .05);
  37. border-color: #e5e5e5 #eee #eee;
  38. border-style: solid;
  39. border-width: 1px 0;
  40. }
  41. .uploader-list {
  42. width: 100%;
  43. overflow: hidden;
  44. }
  45. #picker {
  46. display: inline-block;
  47. line-height: 1.428571429;
  48. vertical-align: middle;
  49. margin: 0 12px 0 0;
  50. }
  51. #picker .webuploader-pick {
  52. padding: 6px 12px;
  53. display: block;
  54. }
  55. </style>
  56. </head>
  57. <body>
  58. <!--<form action="/uploadvideo" method="post" name="uploadfile" enctype="multipart/form-data">-->
  59. <!--<input type="file" name="upload" id="upload">-->
  60. <!--<input type="submit" name="submit" id="submit" value="上传视频">-->
  61. <!--</form>-->
  62. <!--<div class="f-clearfix ng-scope">-->
  63. <!--<span class="m-upload">-->
  64. <!--<a class="u-btn u-btn-custom" href="javascript:;">添加视频</a>-->
  65. <!--<input class="u-upload u-upload-custom" type="file" id="fileinput">-->
  66. <!--</span>-->
  67. <!--<a class="u-btn u-btn-custom f-ml-10 disabled s-disabled" id="submitBtn" ng-class="!checkedPending() &amp;&amp; 'disabled s-disabled'" href="javascript:;" style="">上传视频</a>-->
  68. <!--</div>-->
  69. <div id="uploader" class="wu-example">
  70. <!--用来存放文件信息-->
  71. <div id="thelist" class="uploader-list"></div>
  72. <div class="btns">
  73. <span class="mUpload">
  74. <a class="btn btn-primary" href="javascript:;">
  75. <input type="file" name="file" class="uploadVideo" id="inputid"/>选择文件
  76. </a>
  77. </span>
  78. <button id="uploadid" class="btn btn-default">上传视频</button>
  79. </div>
  80. </div>
  81. <script>
  82. $(function(){
  83. var opt = {
  84. fileInputId: 'inputid',
  85. fileUploadId: 'uploadid'
  86. };
  87. Uploader(opt).init();
  88. })
  89. </script>
  90. <script>
  91. jQuery(function() {
  92. $list = $('#thelist'),
  93. $btn = $('#ctlBtn'),
  94. state = 'pending',
  95. uploader;
  96. uploader = WebUploader.create({
  97. // 不压缩image
  98. resize: false,
  99. // swf文件路径
  100. swf: '{{rootUrl}}global/js/uploader.swf',
  101. // 文件接收服务端。
  102. server: '/upload2',
  103. // 选择文件的按钮。可选。
  104. // 内部根据当前运行是创建,可能是input元素,也可能是flash.
  105. pick: '#picker',
  106. chunked: true,
  107. threads: 1,
  108. formData:{
  109. token:'',
  110. bucket:'',
  111. object:'',
  112. context:''
  113. },
  114. chunkSize: 3 * 1024 * 1024,
  115. // auto: true,
  116. accept: {
  117. title: 'video',
  118. extensions: 'MOV,MP4,M4V,F4V,3GP,MKV,WEBM,VOB,DVD,MPG,MPEG,DAT,TS,MTS,M2TS,RMVB,RM,FLV,AVI,ASF,WMV,SWF',
  119. mimeTypes: 'video/*'
  120. }
  121. });
  122. uploader.on( 'fileQueued', function( file ) {
  123. var fileKey = md5(file.name+ ":" +file.size);
  124. if(localStorage.getItem(fileKey + '_created') != null){
  125. percentage = localStorage.getItem(fileKey + '_percentage');
  126. $list.append( '<div id="' + file.id + '" class="item" >' +
  127. '<h4 class="info">' + file.name + '</h4>' +
  128. '<p class="state">'+ (percentage * 100).toFixed(2) + '%</p>' +
  129. '</div>' );
  130. var $li = $( '#'+file.id ),
  131. $percent = $li.find('.progress .progress-bar');
  132. // 避免重复创建
  133. if ( !$percent.length ) {
  134. $percent = $('<div class="progress progress-striped active">' +
  135. '<div class="progress-bar" role="progressbar" style="width: 0%">' +
  136. '</div>' +
  137. '</div>').appendTo( $li ).find('.progress-bar');
  138. }
  139. $li.find('p.state').text((percentage * 100).toFixed(2) + '%');
  140. $percent.css( 'width', percentage * 100 + '%' );
  141. }else{
  142. localStorage.setItem(fileKey + "_created", +new Date);
  143. $list.append( '<div id="' + file.id + '" class="item">' +
  144. '<h4 class="info">' + file.name + '</h4>' +
  145. '<p class="state">等待上传...'+ WebUploader.formatSize(file.size) +'</p>' +
  146. '</div>' );
  147. }
  148. });
  149. uploader.on( 'uploadAccept', function( file, response ) {
  150. var fileKey = md5(file.file.name+ ":" +file.file.size);
  151. if(response.data.videoinitlist != null){
  152. var token = response.data.videoinitlist.token;
  153. var bucket = response.data.videoinitlist.bucket;
  154. var object = response.data.videoinitlist.object;
  155. localStorage.setItem(fileKey + '_bucket', bucket);
  156. localStorage.setItem(fileKey + '_token', token);
  157. localStorage.setItem(fileKey + '_object', object);
  158. }
  159. var context = response.data.context;
  160. localStorage.setItem(fileKey + '_context', context);
  161. uploader.option('formData', {
  162. token:token,
  163. bucket:bucket,
  164. object:object,
  165. context:context
  166. });
  167. });
  168. uploader.on( 'uploadProgress', function( file, percentage ) {
  169. var fileKey = md5(file.name+ ":" +file.size);
  170. var $li = $( '#'+file.id ),
  171. $percent = $li.find('.progress .progress-bar');
  172. // 避免重复创建
  173. if ( !$percent.length ) {
  174. $percent = $('<div class="progress progress-striped active">' +
  175. '<div class="progress-bar" role="progressbar" style="width: 0%">' +
  176. '</div>' +
  177. '</div>').appendTo( $li ).find('.progress-bar');
  178. }
  179. localStorage.setItem(fileKey + '_percentage', percentage);
  180. $li.find('p.state').text((percentage * 100).toFixed(2) + '%');
  181. $percent.css( 'width', percentage * 100 + '%' );
  182. });
  183. uploader.on( 'uploadSuccess', function( file ) {
  184. var fileKey = md5(file.name+ ":" +file.size);
  185. $( '#'+file.id ).find('p.state').html('<span style="color: #5cb85c">上传成功</span>');
  186. localStorage.removeItem(fileKey + '_created');
  187. localStorage.removeItem(fileKey + '_bucket');
  188. localStorage.removeItem(fileKey + '_token');
  189. localStorage.removeItem(fileKey + '_object');
  190. localStorage.removeItem(fileKey + '_context');
  191. localStorage.removeItem(fileKey + '_percentage');
  192. $btn.text('上传视频');
  193. uploader.option('formData', {
  194. token:'',
  195. bucket:'',
  196. object:'',
  197. context:''
  198. });
  199. uploader.upload();
  200. });
  201. uploader.on( 'uploadError', function( file ) {
  202. $( '#'+file.id ).find('p.state').html('<span style="color: #a94442">上传出错</span>');
  203. });
  204. uploader.on( 'uploadComplete', function( file ) {
  205. $( '#'+file.id ).find('.progress').fadeOut();
  206. });
  207. $btn.on( 'click', function( ) {
  208. if ( state === 'uploading' ) {
  209. uploader.stop(true);
  210. $btn.text('继续上传');
  211. state = 'pending';
  212. } else {
  213. uploader.upload();
  214. $btn.text('暂停上传');
  215. state = 'uploading';
  216. }
  217. });
  218. })
  219. </script>
  220. </body>
  221. </html>