Aqui está o meu formulário HTML:
<form name="myForm" ng-submit="">
<input ng-model='file' type="file"/>
<input type="submit" value='Submit'/>
</form>
Quero fazer upload de uma imagem da máquina local e quero ler o conteúdo do arquivo carregado. Tudo isso eu quero fazer usando o AngularJS.
Quando tento imprimir, o valor $scope.file
vem como indefinido.
angularjs
angularjs-fileupload
Aditya Sethi
fonte
fonte
Respostas:
Algumas das respostas aqui propõem o uso
FormData()
, mas infelizmente esse é um objeto do navegador não disponível no Internet Explorer 9 e abaixo. Se você precisar oferecer suporte a navegadores antigos, precisará de uma estratégia de backup como usar o<iframe>
Flash.Já existem muitos módulos Angular.js para realizar o upload de arquivos. Esses dois têm suporte explícito para navegadores mais antigos:
E algumas outras opções:
Um deles deve se encaixar no seu projeto ou pode lhe dar algumas dicas sobre como codificá-lo.
fonte
O mais fácil é usar a API HTML5, a saber
FileReader
O HTML é bem direto:
No seu controlador, defina o método 'add':
Compatibilidade do navegador
Navegadores de desktop
Navegadores móveis
Nota: o método readAsBinaryString () foi descontinuado e readAsArrayBuffer () deve ser usado.
fonte
onloadend
função de retorno de chamada. Você não precisa de nenhuma biblioteca para usar esta API, ela já está no seu navegador (a menos que você use uma muito antiga). Espero que isto ajude.readAsArrayBuffer
método FileReaderSync (disponível apenas em trabalhadores da Web) em vez da API regular e assíncrona FileReader ?Esta é a maneira moderna do navegador, sem bibliotecas de terceiros. Funciona em todos os navegadores mais recentes.
HTML:
PHP:
js fiddle (somente front-end) https://jsfiddle.net/vince123/8d18tsey/31/
fonte
ng-submit
ação ou de um formulário? Isto por si só não faz nadaAbaixo está um exemplo prático de upload de arquivo:
http://jsfiddle.net/vishalvasani/4hqVu/
Nesta função chamada
Do modo de exibição que atualizará a matriz de arquivos no controlador
ou
Você pode verificar o upload do arquivo jQuery usando o AngularJS
http://blueimp.github.io/jQuery-File-Upload/angularjs.html
fonte
Você pode conseguir arquivo agradável e pasta upload usando flow.js .
https://github.com/flowjs/ng-flow
Confira uma demonstração aqui
http://flowjs.github.io/ng-flow/
Ele não suporta IE7, IE8, IE9, portanto você precisará usar uma camada de compatibilidade
https://github.com/flowjs/fusty-flow.js
fonte
Use o
onchange
evento para passar o elemento do arquivo de entrada para sua função.<input type="file" onchange="angular.element(this).scope().fileSelected(this)" />
Portanto, quando um usuário seleciona um arquivo, você tem uma referência a ele sem precisar clicar no botão "Adicionar" ou "Enviar".
fonte
Eu tentei todas as alternativas que o @Anoyz (resposta correta) oferece ... e a melhor solução é https://github.com/danialfarid/angular-file-upload
Algumas funcionalidades:
É um bom trabalho para mim. Você só precisa prestar atenção às instruções.
No lado do servidor, uso o middleware NodeJs, Express 4 e Multer para gerenciar solicitações de várias partes.
fonte
nlzt9LJWRrAZEO3ZteZUOgGc
mas sem o formato .png. Como adicionar isso?HTML
Scripts
fonte
O
<input type=file>
elemento não funciona por padrão com a diretiva ng-model . Ele precisa de uma diretiva personalizada :Demonstração de trabalho da
select-ng-files
diretiva que funciona comng-model
1$http.post
de um FileListAo enviar um POST com um objeto File , é importante definir
'Content-Type': undefined
. O método de envio XHR detectará o objeto File e definirá automaticamente o tipo de conteúdo.fonte
Fácil com uma diretiva
Html:
JS:
Na diretiva, garantimos que um novo escopo seja criado e, em seguida, ouvimos as alterações feitas no elemento de entrada do arquivo. Quando mudanças são detectadas, emitem um evento para todos os escopos ancestrais (para cima) com o objeto de arquivo como parâmetro.
No seu controlador:
Então, na sua chamada ajax:
http://shazwazza.com/post/uploading-files-and-json-data-in-the-same-request-with-angular-js/
fonte
Eu acho que este é o upload de arquivo angular:
ng-upload de arquivo
Diretiva JS Angular leve para fazer upload de arquivos.
Aqui está a página DEMO .
https://github.com/danialfarid/ng-file-upload
fonte
Seu arquivo e dados json são enviados ao mesmo tempo.
fonte
Você pode usar um
FormData
objeto seguro e rápido:fonte
<input type="file" ng-change="contentChanged($event)">
, como fazê-lo?http://jsfiddle.net/vishalvasani/4hqVu/ funciona bem no chrome e no IE (se você atualizar um pouco o CSS na imagem de fundo). Isso é usado para atualizar a barra de progresso:
mas nos dados [percentuais] do FireFox angular não são atualizados com êxito no DOM, embora os arquivos estejam sendo carregados com êxito.
fonte
load
evento e, se o tamanho for computável, dispare um evento de progresso para indicar o upload bem-sucedido. O github.com/danialfarid/angular-file-upload já cuida disso.Você pode considerar o IaaS para upload de arquivos, como Uploadcare . Existe um pacote Angular para isso: https://github.com/uploadcare/angular-uploadcare
Tecnicamente, é implementado como uma diretiva, fornecendo opções diferentes para upload e manipulações para imagens carregadas no widget:
Mais opções de configuração para jogar: https://uploadcare.com/widget/configure/
fonte
Sei que é uma entrada tardia, mas criei uma diretiva de upload simples. Que você pode começar a trabalhar rapidamente!
ng-simple-upload mais no Github com um exemplo usando a API da Web.
fonte
HTML
adicione o método 'profileimage ()' ao seu controlador
fonte
Esta deve ser uma atualização / comentário para a resposta do @ jquery-guru, mas como eu não tenho representante suficiente, ela será apresentada aqui. Ele corrige os erros que agora são gerados pelo código.
https://jsfiddle.net/vzhrqotw/
A mudança é basicamente:
Para:
Sinta-se livre para ir para um local mais apropriado, se desejar.
fonte
Eu li todos os tópicos e a solução da API HTML5 parecia a melhor. Mas isso altera meus arquivos binários, corrompendo-os de uma maneira que não investiguei. A solução que funcionou perfeitamente para mim foi:
HTML:
JS:
Lado do servidor (PHP):
fonte
Posso fazer upload de arquivos usando o AngularJS usando o código abaixo:
O
file
argumento que precisa ser passado para a funçãongUploadFileUpload
é$scope.file
conforme sua pergunta.O ponto chave aqui é usar
transformRequest: []
. Isso impedirá que o $ http mexa no conteúdo do arquivo.fonte
A resposta acima aceita não é compatível com o navegador. Se alguém tiver um problema de compatibilidade, tente isso.
Violino
Ver Código
Código do controlador
fonte
em palavras simples
em HTML - adicione apenas o código abaixo
no controlador - Esta função é chamada quando você clica em " botão de upload de arquivo" . ele fará o upload do arquivo. você pode consolá-lo.
adicione mais nos controladores - abaixo do código, adicione a função Esta função é chamada quando você clica no botão usado "bater na api (POST)" . ele enviará o arquivo (que foi carregado) e os dados do formulário para o back-end.
neste caso .. eu adicionei o código abaixo como dados do formulário
fonte
No controlador angularJS
fonte
Nós usamos HTML, CSS e AngularJS. O exemplo a seguir mostra sobre como fazer upload do arquivo usando o AngularJS.
fonte
Exemplo de trabalho usando diretiva simples ( modelo de arquivo ng ):
e use
FormData
para fazer upload de arquivo em sua função.todos os créditos vão para https://github.com/mistralworks/ng-file-model
Eu enfrentei um pequeno problema que você pode ver aqui: https://github.com/mistralworks/ng-file-model/issues/7
Finalmente, aqui está um repositório bifurcado: https://github.com/okasha93/ng-file-model/blob/patch-1/ng-file-model.js
fonte
O código ajuda a inserir o arquivo
insert.js
save_data.php
fonte
isso funciona
file.html
controller.js
fileupload.php
fonte
FAZER UPLOAD DE ARQUIVOS
DOWNLOAD DE ARQUIVOS:
fonte
fonte