今回は XMLHttpRequestを使ってファイルをサーバにアップロードする際に、その進捗状況を把握したい場合のコードを書いてみる。
コードは当然 JavaScript である。以下に HTMLと合わせたコードを示す。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ファイルアップロードの進捗状況</title> <style> #progress-bar { width: 100%; background-color: #f3f3f3; position: relative; } #progress-bar span { position: absolute; height: 100%; background-color: #4CAF50; } </style> </head> <body> <input type="file" id="file-input"> <div id="progress-bar"><span></span></div> <script> document.getElementById('file-input').addEventListener('change', function (event) { const file = event.target.files[0]; const xhr = new XMLHttpRequest(); const formData = new FormData(); xhr.open('POST', '/upload', true); xhr.upload.addEventListener('progress', function (event) { if (event.lengthComputable) { const percentage = (event.loaded / event.total) * 100; document.getElementById('progress-bar').querySelector('span').style.width = percentage + '%'; } }); xhr.onreadystatechange = function () { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { alert('ファイルのアップロードに成功しました。'); } else { alert('ファイルのアップロードに失敗しました。'); } } }; formData.append('file', file); xhr.send(formData); }); </script> </body> </html>
input type="file" 要素と、進捗状況を表示する div 要素を配置し、CSS で調整しておく。
input 要素が change されたタイミングで XMLHttpRequest を使ってサーバにPOSTする。
リクエストの進捗状況を表示するには、xhr.upload オブジェクトの progress イベントを使う。
event.loadedとevent.totalプロパティを使って、アップロードの進捗率(進捗率)を計算し、その値を使って進捗バーの幅を更新している。
最後に、xhr.onreadystatechangeでリクエストの状態を監視し、リクエストが完了したら(readyState === XMLHttpRequest.DONE)、ステータスコードが200の場合はアップロード成功、それ以外の場合はアップロード失敗として単純にアラートで通知している。
実際のプロジェクトでは、エラー処理やファイル制限等が必要となるため、このようなサンプルと同じようにはいかないだろうが、進捗管理の要点は十分に理解できると思う。
0 件のコメント:
コメントを投稿