>  기사  >  웹 프론트엔드  >  JavaScript를 사용하여 서버에 파일을 보내고 업로드 진행 상황을 모니터링하는 방법은 무엇입니까?

JavaScript를 사용하여 서버에 파일을 보내고 업로드 진행 상황을 모니터링하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-10 09:36:02151검색

How to send a file to a server and monitor its upload progress using JavaScript?

JavaScript로 파일 보내기

사용자가 파일을 선택할 수 있는 버튼을 나타내는 HTML 요소 이 있다고 가정합니다. 버튼을 클릭하고 파일을 선택하면 해당 이름이 document.getElementById("image-file").value에 저장됩니다. 서버가 URL "/upload/image"에서 다중 부분 POST 요청을 지원하는 경우 해당 엔드포인트로 파일을 어떻게 보내나요? 또한 업로드 진행 상황을 어떻게 모니터링합니까?

Fetch가 포함된 순수 JavaScript

선택적인 wait-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});

Async-Try-Catch의 예

이 예에는 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);
  }
}</p>
<h3>업로드 진행률 모니터링</h3>
<p>안타깝게도 request.onprogress와 같은 메서드는 JSON으로 전송되지 않습니다. 가져오기를 통한 HTML5 파일 업로드에서 지원되지만 네트워크 이벤트를 수신하여 전체 업로드 진행 상황을 모니터링할 수 있습니다.</p>
<pre class="brush:php;toolbar:false">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);

위 내용은 JavaScript를 사용하여 서버에 파일을 보내고 업로드 진행 상황을 모니터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.