Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
Clique aqui para saber mais
TFile upload de Classe listada como public_classes[] Boa tarde. Estou tentando implementar um upload de imagens em uma tela que pode ser usada por usuarios não cadastrados (a classe esta listada no application.ini como public_classes[]) Mas a imagem não é carregada para dentro da pasta /tmp/ Queria saber se tem que fazer alguma coisa especifica ou se é um bloqueio mesmo (de que classes publicas não possam fazer upload de arquivos pra den...
MA
TFile upload de Classe listada como public_classes[]  
Boa tarde. Estou tentando implementar um upload de imagens em uma tela que pode ser usada por usuarios não cadastrados (a classe esta listada no application.ini como public_classes[])

Mas a imagem não é carregada para dentro da pasta /tmp/

Queria saber se tem que fazer alguma coisa especifica ou se é um bloqueio mesmo (de que classes publicas não possam fazer upload de arquivos pra dentro do /tmp/)

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (10)


AC

Boa tarde.

Verifique as permissões para a pasta.
MA

Boa tarde Americo!

Já havia verificado isso. Tanto que outra classe (mas uma classe que é acessada somente por usuários cadastrados) consegue fazer upload de arquivos normalmente.

Somente essa, que é uma classe publica, que não faz. O TFILE fica mostrando o icone de carregamento infinitamente e nem mostra a mensagem de upload completo.

segue abaixo os codigos:

  1. <?php
  2.   private   $frame;
  3.     public function __construct$param )
  4.     {
  5. //outros codigos
  6. $imagem = new TFile('imagem');
  7.         
  8. $imagem->setCompleteAction(new TAction(array($this'onComplete')));
  9. $imagem->setAllowedExtensions( ['png'] );
  10. // outros códigos
  11. $limagem = new TLabel('Carregar imagem?');
  12. // outros códigos
  13. $this->form->addFields( [$limagem], [$imagem] );
  14. $this->frame = new TElement('div');
  15. $this->frame->id 'logo_frame';
  16. $this->frame->style 'width:100%;height:auto;min-height:50px;border:1px solid gray;padding:4px;';
  17. $this->form->addFields( [new TLabel('')], [$this->frame]);
  18. // outros códigos
  19.     public static function onComplete($param)
  20.     {
  21.         new TMessage('info''Upload completo: '.$param['logo']);
  22.         // refresh logo_frame
  23.         TScript::create("$('#logo_frame').html('')");
  24.         TScript::create("$('#logo_frame').append(\"<img style='width:100%' src='tmp/{$param['logo']}'>\");");
  25.     }
  26. ?>
MA

errata:


  1. <?php
  2.     public static function onComplete($param)
  3.     {
  4.         new TMessage('info''Upload completo: '.$param['imagem']);
  5.         // refresh logo_frame
  6.         TScript::create("$('#logo_frame').html('')");
  7.         TScript::create("$('#logo_frame').append(\"<img style='width:100%' src='tmp/{$param['imagem']}'>\");");
  8.     }
  9. ?>
MA

a pasta tmp/ foi data permissão com chmod 777, e ainda assim o arquivo não é carregado para a pasta
MA

fiz EXATAMENTE a mesma coisa em outra tela (uma é para acesso de usuários não cadastrados, na que eu fiz agora é a mesma tela mas para usuários cadastrados)


na classe:
OuvidoriaChamadosForm (que não é publica, ou seja, não esta listada no application.ini como public_classes[]) funciona perfeitamente.

OuvidoriaUsuariosNovoPedido (que é a classe publica, acessada pelos munícipes) não funciona. E foi feito da mesma forma.



há algum tipo de bloqueio pela segunda ser uma public_class[]
NR

A classe TFile usa o service AdiantiUploaderService para enviar o arquivo ao servidor. Provavelmente você precisar colocar esse service como public também.
MA

Vou testar Nataniel. Posto em seguida os resultados.
MA

Deu certo Nataniel!


Era só isso mesmo!
Muito obrigado!
LF

Onde eu coloco este serviço como público AdiantiUploaderService?
AG

Ola Leondas boa tarde.

No arquivo application.ini na pasta app/config insira esta linha.

public_classes[] = AdiantiUploaderService

Abraço

Anderson