test-upload.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <!-- Required meta tags -->
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <!-- Bootstrap CSS -->
  8. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
  9. integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
  10. <title>Multiple File Upload with Progress Bar using JavaScript & PHP</title>
  11. </head>
  12. <body>
  13. <div class="container">
  14. <h1 class="mt-3 mb-3 text-center">Multiple File Upload with Progress Bar using JavaScript & PHP</h1>
  15. <div class="card">
  16. <div class="card-header">Select File</div>
  17. <div class="card-body">
  18. <table class="table">
  19. <tr>
  20. <td width="50%" align="right"><b>API名稱</b></td>
  21. <td width="50%">
  22. <input type="text" id="foldername" name="foldername" />
  23. </td>
  24. </tr>
  25. <tr>
  26. <td width="50%" align="right"><b>Select File</b></td>
  27. <td width="50%">
  28. <input type="file" id="file" multiple webkitdirectory mozdirectory />
  29. </td>
  30. </tr>
  31. </table>
  32. </div>
  33. </div>
  34. <br />
  35. <div class="progress" id="progress_bar" style="display:none; ">
  36. <div class="progress-bar" id="progress_bar_process" role="progressbar" style="width:0%">0%</div>
  37. </div>
  38. <div id="uploaded_image" class="row mt-5"></div>
  39. </div>
  40. </body>
  41. </html>
  42. <script>
  43. function _(element) {
  44. return document.getElementById(element);
  45. }
  46. _('select_file').onchange = function (event) {
  47. var form_data = new FormData();
  48. var image_number = 1;
  49. var error = '';
  50. form_data.append("foldername", _('foldername').value);
  51. for (var count = 0; count < _('select_file').files.length; count++) {
  52. form_data.append("files[]", _('select_file').files[count]);
  53. image_number++;
  54. }
  55. if (error != '') {
  56. _('uploaded_image').innerHTML = error;
  57. _('select_file').value = '';
  58. } else {
  59. _('progress_bar').style.display = 'block';
  60. var ajax_request = new XMLHttpRequest();
  61. ajax_request.open("POST", "upload.php");
  62. ajax_request.upload.addEventListener('progress', function (event) {
  63. var percent_completed = Math.round((event.loaded / event.total) * 100);
  64. _('progress_bar_process').style.width = percent_completed + '%';
  65. _('progress_bar_process').innerHTML = percent_completed + '% completed';
  66. });
  67. ajax_request.addEventListener('load', function (event) {
  68. _('uploaded_image').innerHTML =
  69. '<div class="alert alert-success">Files Uploaded Successfully</div>';
  70. _('select_file').value = '';
  71. });
  72. ajax_request.onreadystatechange = () => {
  73. if (ajax_request.readyState === 4) {
  74. console.log(ajax_request.response);
  75. }
  76. }
  77. ajax_request.send(form_data);
  78. }
  79. };
  80. </script>