ユーザーがファイルを選択できるボタンを表す HTML 要素 があるとします。ボタンをクリックしてファイルを選択すると、その名前が document.getElementById("image-file").value に保存されます。サーバーが URL「/upload/image」でのマルチパート POST リクエストをサポートしている場合、そのエンドポイントにファイルを送信するにはどうすればよいでしょうか?さらに、アップロードの進行状況を監視するにはどうすればよいですか?
オプションの await-try-catch 処理を備えた fetch API を使用できます:
let photo = document.getElementById("image-file").files[0]; let formData = new FormData(); formData.append("photo", photo); fetch('/upload/image', {method: "POST", body: formData});
この例には、JSON として送信されたユーザー データも含まれています:
async function SavePhoto(inp) { let user = { name: 'john', age: 34 }; let formData = new FormData(); let photo = inp.files[0]; formData.append("photo", photo); formData.append("user", JSON.stringify(user)); const ctrl = new AbortController(); // for timeout setTimeout(() => ctrl.abort(), 5000); try { let r = await fetch('/upload/image', { method: "POST", body: formData, signal: ctrl.signal, }); console.log('HTTP response code:', r.status); } catch (e) { console.log('Huston we have problem...:', e); } }
残念ながら、request.onprogress のようなメソッドは、フェッチを使用した HTML5 ファイルのアップロードではサポートされていませんが、ネットワーク イベントをリッスンすることで全体的なアップロードの進行状況を監視できます。
let xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', function(e) { if (e.lengthComputable) { let percentComplete = (e.loaded / e.total) * 100; console.log('Upload progress:', percentComplete '%'); } }); xhr.open('POST', '/upload/image'); xhr.send(formData);
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3