upload.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. std_name=''
  2. std_id=''
  3. accessid = ''
  4. accesskey = ''
  5. host = ''
  6. policyBase64 = ''
  7. signature = ''
  8. callbackbody = ''
  9. filename = ''
  10. upfilename = ''
  11. key = ''
  12. expire = 0
  13. g_object_name = ''
  14. g_object_name_type = 'local_name' //使用本地名
  15. max_file_size=0
  16. aspect_num=''
  17. now = timestamp = Date.parse(new Date()) / 1000;
  18. type = getQueryVariable("type");
  19. var a = send_request( '../../vod/status.htm?aspect_id='+ getQueryVariable("id") + "&type=" + type);
  20. if (a.errorCode=='1102')
  21. window.location = '../';
  22. if (a.errorCode=='1901') {
  23. document.getElementById('h').innerText=a.errorMsg;
  24. document.getElementById('selectfiles').style.display="none";
  25. } else if(a.errorCode=='20000') {
  26. debugger;
  27. document.getElementById('h').innerHTML ="上传成功";
  28. document.getElementById('selectfiles').style.display="none";
  29. } else {
  30. debugger;
  31. max_file_size = a.map.max_file_size;
  32. std_name = a.map.std_name;
  33. std_id = a.map.std_id;
  34. document.getElementById('h').innerHTML ="请上传文件(最大"+max_file_size+"MB) <br>请认真核对。<br><font color='red'>未显示上传成功前请不要离开本页面,切勿切屏、息屏。</font>";
  35. }
  36. function send_request(serverUrl)
  37. {
  38. var xmlhttp = null;
  39. if (window.XMLHttpRequest){
  40. xmlhttp=new XMLHttpRequest();
  41. } else if (window.ActiveXObject){
  42. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  43. }
  44. if (xmlhttp!=null){
  45. // serverUrl是 用户获取 '签名和Policy' 等信息的应用服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
  46. //serverUrl = 'http://10072.hmsoft.cn/bk/vod/postkey.htm'
  47. xmlhttp.open( "GET", serverUrl, false );
  48. xmlhttp.send( null );
  49. return eval ("(" + xmlhttp.responseText + ")");
  50. }else{
  51. alert("Your browser does not support XMLHTTP.");
  52. }
  53. };
  54. function check_object_radio() {
  55. var tt = document.getElementsByName('myradio');
  56. for (var i = 0; i < tt.length ; i++ )
  57. {
  58. if(tt[i].checked)
  59. {
  60. g_object_name_type = tt[i].value;
  61. break;
  62. }
  63. }
  64. }
  65. function get_signature()
  66. {
  67. // 可以判断当前expire是否超过了当前时间, 如果超过了当前时间, 就重新取一下,3s 作为缓冲。
  68. now = timestamp = Date.parse(new Date()) / 1000;
  69. if (expire < now + 3)
  70. {
  71. var obj = send_request( '../../vod/postkey.htm?aspect_id='+ getQueryVariable("id")+'&std_id='+std_id+"&type=" + getQueryVariable("type"));
  72. if(obj['success']!=null){
  73. console.log(obj['errorMsg']);
  74. alert(obj['errorMsg']);
  75. if (a.errorCode=='1102')
  76. window.location = '../';
  77. return false;
  78. }
  79. host = obj['host']
  80. policyBase64 = obj['policy']
  81. accessid = obj['accessid']
  82. signature = obj['signature']
  83. expire = parseInt(obj['expire'])
  84. callbackbody = obj['callback']
  85. key = obj['dir']
  86. aspect_num = obj['aspect_num']
  87. return true;
  88. }
  89. return false;
  90. };
  91. function random_string(len) {
  92.   varlen = len || 32;
  93.   var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
  94.   var maxPos = chars.length;
  95.   var pwd = '';
  96.   for (i = 0; i < len; i++) {
  97.   pwd += chars.charAt(Math.floor(Math.random() * maxPos));
  98. }
  99. return pwd;
  100. }
  101. function get_suffix(filename) {
  102. pos = filename.lastIndexOf('.')
  103. suffix = ''
  104. if (pos != -1) {
  105. suffix = filename.substring(pos)
  106. }
  107. return suffix;
  108. }
  109. function get_name(filename) {
  110. pos = filename.lastIndexOf('.')
  111. f = ''
  112. if (pos != -1) {
  113. f = filename.substring(0,pos)
  114. }
  115. return f;
  116. }
  117. function calculate_object_name(filename)
  118. {
  119. if (g_object_name_type == 'local_name')
  120. {
  121. g_object_name += "${filename}"
  122. }
  123. else if (g_object_name_type == 'random_name')
  124. {
  125. suffix = get_suffix(filename)
  126. g_object_name = key + random_string(10) + suffix
  127. }
  128. else if (g_object_name_type == 'upfilename')
  129. {
  130. suffix = get_suffix(filename)
  131. g_object_name = key + upfilename + suffix
  132. }
  133. return ''
  134. }
  135. function get_uploaded_object_name(filename)
  136. {
  137. if (g_object_name_type == 'local_name')
  138. {
  139. tmp_name = g_object_name
  140. tmp_name = tmp_name.replace("${filename}", filename);
  141. return tmp_name
  142. }
  143. else if(g_object_name_type == 'random_name')
  144. {
  145. return g_object_name
  146. }
  147. }
  148. function set_upload_param(up, filename, ret)
  149. {
  150. if (ret == false)
  151. {
  152. ret = get_signature(filename)
  153. //判断
  154. }
  155. if (ret){
  156. g_object_name = key;
  157. if (filename != '') {
  158. suffix = get_suffix(filename)
  159. calculate_object_name(filename)
  160. }
  161. new_multipart_params = {
  162. 'key' : g_object_name,
  163. 'policy': policyBase64,
  164. 'OSSAccessKeyId': accessid,
  165. 'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
  166. 'callback' : callbackbody,
  167. 'signature': signature,
  168. };
  169. up.setOption({
  170. 'url': host,
  171. 'multipart_params': new_multipart_params
  172. });
  173. up.start();
  174. }
  175. }
  176. function getQueryVariable(variable)
  177. {
  178. var query = window.location.search.substring(1);
  179. var vars = query.split("&");
  180. for (var i=0;i<vars.length;i++) {
  181. var pair = vars[i].split("=");
  182. if(pair[0] == variable){return pair[1];}
  183. }
  184. return(false);
  185. }
  186. var uploader = new plupload.Uploader({
  187. runtimes : 'html5,flash,silverlight,html4',
  188. browse_button : 'selectfiles',
  189. multi_selection: false,
  190. container: document.getElementById('container'),
  191. flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
  192. silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',
  193. url : 'http://oss.aliyuncs.com',
  194. filters: {
  195. mime_types : [ //只允许上传图片和zip文件
  196. { title : "mp4 files", extensions : "pdf,ppt,pptx,mp4,mov,flv" }
  197. ],
  198. max_file_size :'1000mb', //最大上传
  199. prevent_duplicates : true //不允许选取重复文件
  200. },
  201. init: {
  202. PostInit: function() {
  203. document.getElementById('ossfile').innerHTML = '';
  204. },
  205. FilesAdded: function(up, files) {
  206. console.log("FilesAdded"+files.length);
  207. plupload.each(files, function(file) {
  208. document.getElementById('ossfile').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ')<b></b>'
  209. +'<div class="progress"><div class="progress-bar" style="width: 0%"></div></div>'
  210. +'</div>';
  211. });
  212. set_upload_param(up, '', false);
  213. },
  214. BeforeUpload: function(up, file) {
  215. set_upload_param(up, file.name, true);
  216. },
  217. UploadProgress: function(up, file) {
  218. var d = document.getElementById(file.id);
  219. d.getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
  220. var prog = d.getElementsByTagName('div')[0];
  221. var progBar = prog.getElementsByTagName('div')[0]
  222. progBar.style.width= 2*file.percent+'px';
  223. progBar.setAttribute('aria-valuenow', file.percent);
  224. },
  225. FileUploaded: function(up, file, info) {
  226. if (info.status == 200)
  227. {
  228. document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '文件已经上传成功';
  229. document.getElementById('selectfiles').style.display="none";
  230. }
  231. else if (info.status == 203)
  232. {
  233. document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '上传成功,但是oss访问用户设置的上传回调服务器失败,失败原因是:' + info.response;
  234. }
  235. else
  236. {
  237. document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = info.response;
  238. }
  239. },
  240. Error: function(up, err) {
  241. debugger;
  242. if (err.code == -600) {
  243. document.getElementById('console').appendChild(document.createTextNode("\n上传的文件太大了,最大允许上传"+max_file_size+"MB"));
  244. }
  245. else if (err.code == -601) {
  246. document.getElementById('console').appendChild(document.createTextNode("\n选择的文件类型不正确"));
  247. }
  248. else if (err.code == -602) {
  249. document.getElementById('console').appendChild(document.createTextNode("\n选择文件重复"));
  250. }
  251. else
  252. {
  253. document.getElementById('console').appendChild(document.createTextNode("\nError xml:" + err.response));
  254. }
  255. }
  256. }
  257. });
  258. uploader.init();
  259. //console.log( uploader.settings.filters.max_file_size);