JavaScript: enviar o ficheiro

Digamos que tenho este elemento na página:
<input id="image-file" type="file" />

Isto irá criar um botão que permite aos utilizadores da página web seleccionar um ficheiro através de um ficheiro so "aberto..."dialog in the browser.

digamos que o utilizador clica no botão dito, selecciona um ficheiro na janela e, em seguida, carrega no botão "Ok" para fechar a janela.

o nome do ficheiro seleccionado está agora guardado em:

document.getElementById("image-file").value
Agora, digamos que o servidor lida com POSTs multi-partes no URL "/upload / image".

Como é que envio o ficheiro para "/upload/image"?

Além disso, como é que ouço a notificação de que o ficheiro está a acabar de enviar?

Author: YummyBánhMì, 2011-04-08

4 answers

A menos que esteja a tentar enviar o ficheiro com o ajax, basta enviar o Formulário para /upload/image.

<form enctype="multipart/form-data" action="/upload/image" method="post">
    <input id="image-file" type="file" />
</form>

Se quiser fazer o upload da imagem em segundo plano( por exemplo, sem enviar todo o formulário), pode usar o ajax:

 75
Author: Matt Ball, 2017-05-23 12:18:23

Se está de facto a procurar uma forma pura de enviar uma imagem em javascript, então o seguinte tutorial de 2009 dir-lhe-á exactamente como fazer isso:

Http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html

Encontrei isto quando queria adicionar autenticação básica a um envio de formulários, sem activar cookies. Por exemplo, quando tiver campos de utilizador/Senha com o seu nome de ficheiro, ficheiro, etc.

Espero que isto ajude!
 19
Author: dwh, 2012-10-30 15:55:49

Puro JS: utilizar o seguinte código

let photo = document.getElementById("image-file").files[0] // get file from input

let formData = new FormData();
formData.append("photo", photo);        
// formData.append("user", JSON.stringify(user));   // you can add also some json data to formData like e.g. user = {name:'john', age:34}

let xhr = new XMLHttpRequest();
xhr.open("POST", '/upload/image');
xhr.send(formData);
  • no lado do serwer pode ler o nome do ficheiro original (e outras informações) que é automaticamente incluído no pedido acima.
  • Você não precisa de usar xhr.setRequestHeader('Content-Type', 'multipart/form-data'); - isto será definido automaticamente pelo navegador.
  • em vez de /upload/image, pode usar o endereço completo como http://.../upload/image.
  • esta solução deve funcionar em todos os navegadores principais.

Mais informações sobre o tratamento da resposta/erro aqui.

E aqui é um exemplo de trabalho .
 4
Author: Kamil Kiełczewski, 2018-08-13 21:48:51

Como o seu criador eu sou preconceituoso ;) mas você também pode considerar o uso de algo como https://uppy.io. Ele faz o upload de arquivos sem navegar para fora da página e oferece alguns bônus, como arrastar e soltar, retomar uploads em caso de falhas do navegador/redes falhas, e a importação a partir e.g. Instagram. Também é de código aberto e não depende de jQuery ou algo assim.

 2
Author: kvz, 2017-08-25 09:13:55