cloud.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. requirePHPLib('form');
  3. ?>
  4. <?php echoUOJPageHeader('数据中心') ?>
  5. <div class="row shadow my-4">
  6. <div class="col-12 p-4">
  7. <h3>数据中心</h3>
  8. </div>
  9. <div class="col-6 p-4">
  10. <input type="file" id="fileinput">
  11. </div>
  12. <div class="col-6 text-right p-4">
  13. <span id="errormsg" class="text-danger"></span>
  14. <button type="button" onclick="upload()" class="btn btn-primary">上传</button>
  15. </div>
  16. </div>
  17. <script>
  18. let file = null, starttime = null, uploaded = 0, lasttime = null;
  19. document.getElementById('fileinput').onchange = (e) => file = e.target.files[0];
  20. function prettysize(i)
  21. {
  22. return i;
  23. }
  24. function update_progress(curr, tot) {
  25. let errmsg = document.getElementById('errormsg');
  26. errmsg.innerHTML = '进度:' + prettysize(curr) + ' / ' + prettysize(tot);
  27. }
  28. async function upload() {
  29. let errmsg = document.getElementById('errormsg');
  30. if (!file) {
  31. errmsg.innerHTML = '未选择文件';
  32. return;
  33. }
  34. const HOST = 'https://103.205.253.104:56170';
  35. const SYN = HOST + '/syn',
  36. UPLOAD = HOST + '/upload',
  37. FIN = HOST + '/fin';
  38. var blksize = 1048576 * 4;
  39. var syndata = new FormData();
  40. syndata.append('size', file.size);
  41. fetch(SYN, { method: 'POST', body: syndata }).then((res) => {
  42. res.json().then(async (data) => {
  43. if (data.status != 'ok') {
  44. errmsg.innerHTML = '失败:' + data.msg;
  45. return null;
  46. }
  47. var ssid = data['ssid'];
  48. for (var i = 0; i < file.size; i += blksize) {
  49. var data = new FormData();
  50. data.append('chunk', file.slice(i, Math.min(file.size, i + blksize)));
  51. data.append('ssid', ssid);
  52. await fetch(UPLOAD, { method: 'POST', body: data });
  53. update_progress(i, file.size);
  54. }
  55. var findata = new FormData();
  56. findata.append('ssid', ssid);
  57. await fetch(FIN, { method: 'POST', body: findata });
  58. errmsg.textContent = '完成';
  59. })});
  60. }
  61. </script>
  62. <?php echoUOJPageFooter() ?>