JavaScript: enviar o ficheiro
<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?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:
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!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 comohttp://.../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 .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.