"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como enviar um arquivo para um servidor e monitorar o andamento do upload usando JavaScript?

Como enviar um arquivo para um servidor e monitorar o andamento do upload usando JavaScript?

Publicado em 2024-11-12
Navegar:821

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

Enviando arquivos em JavaScript

Suponha que você tenha um elemento HTML representando um botão que permite aos usuários selecionar um arquivo. Ao clicar no botão e escolher um arquivo, seu nome é armazenado em document.getElementById("arquivo-imagem").value. Se o servidor suportar solicitações POST de várias partes na URL "/upload/image", como você envia o arquivo para esse endpoint? Além disso, como você monitora o progresso do upload?

JavaScript puro com Fetch

Você pode usar a API fetch com manipulação opcional de await-try-catch:

let photo = document.getElementById("image-file").files[0];
let formData = new FormData();

formData.append("photo", photo);
fetch('/upload/image', {method: "POST", body: formData});

Exemplo com Async-Try-Catch

Este exemplo também inclui dados do usuário enviados como 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);
  }
}

Monitorando o progresso do upload

Infelizmente, métodos como request.onprogress não são suportados no upload de arquivos HTML5 com fetch, mas você pode monitorar o progresso geral do upload ouvindo os eventos da rede:

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);
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3