TFile para txt e PDF Boa noite galera, gostaria de algum exemplo de como fazer upload de arquivo TXT com o adiante. Obrigado....
WS
TFile para txt e PDF  
Boa noite galera, gostaria de algum exemplo de como fazer upload de arquivo TXT com o adiante.

Obrigado.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (10)


MG

O TFile assim que executado já faz o upload para a pasta "tmp'.
No onSave eu uso o seguinte código para trocá-lo de basta e também renomear o arquivo:

 
  1. <?php
  2. $source_file = 'tmp/'.$param['file'];
  3. $file_name = 'C'.$data->id.$param['file'];
  4. $target_file = 'storage/' . $file_name;
  5. if (file_exists($source_file))
  6. {
  7. // move to the target directory
  8. rename($source_file, $target_file);
  9. }
  10. ?>
NR

adianti.com.br/framework_files/tutor/index.php?class=ProductForm&
WS

Muito bom obrigado....como posso fazer para validar o campo TFILE?...
MG

O que seria validar o campo TFile?
WS

Marcelo, seria verificar se o campo input do tipo file tem arquivo....
Igual ao TRequiredValidator, porém o TRequiredValidator não funciona nesse caso...
MG

Vou te passar um exemplo do que faço hoje, pode não ser a melhor solução, mas funciona:

O "$param" recebe todos os campos do formulário, o "file" é um deles.
No meu caso específico eu tenho uma tabela onde relaciono o cliente ou outro tipo qualquer, e adiciono quantos anexos forem "upados" pelo usuário e antes de salvar o registro no banco de dados eu verifico se ele existe com "isset".
Então se não veio o "file", eu não faço nada, ou seja, não crio o registro.
No seu caso, você poderia aciona o TMessage ou algo parecido.

 
  1. <?php
  2. if (isset($param['file'])) {
  3. if (!empty($param['file'])) {
  4. $source_file = 'tmp/'.$param['file'];
  5. $file_name = 'C'.$data->id.$param['file'];
  6. //$target_file = 'storage/' . $param['file'];
  7. $target_file = 'storage/' . $file_name;
  8. //$finfo = new finfo(FILEINFO_MIME_TYPE);
  9. // if the user uploaded a source file
  10. if (file_exists($source_file))
  11. {
  12. // move to the target directory
  13. rename($source_file, $target_file);
  14. }
  15. // grava o documento
  16. $doc = new Documentos;
  17. $doc->doc_id = $data->id;
  18. $doc->tipo = 'C';
  19. $doc->descricao = $param['descricao_file'];
  20. $doc->nomedocumento = $file_name;
  21. $doc->login = TSession::getValue('login');
  22. $doc->created_at = date('Y-m-d H:m:s');
  23. $doc->updated_at = date('Y-m-d H:m:s');
  24. $doc->store();
  25. // se foi enviado um documento, seta a segunda aba
  26. $this->notebook->setCurrentPage(1);
  27. }
  28. }
  29. ?>
WS

Entendi Marcelo, mais veja bem, o usuário ao selecionar a imagem ele ja faz upload no servidor certo?....

e Se ele selecionar a imagem e não clicar no botão salvar?...

Nesse caso eu teria um arquivo inutilizável dentro do meu servidor certo?...isso por que você não salvou o nome do arquivo dentro do seu banco de dados.

Posso estar engano também, mais pelo que analise no código seria isso....
MG

Isso é verdade. Sinceramente nunca fiz esta pergunta.
Talvez tenha uma forma, e alguém mais experiente poderá ser este tópico e dar uma "luz".

Para resolver isso, também criei uma rotina que executa a cada 30 minutos (uso cronjob) que faz a limpeza do diretório "tmp".
Desta forma eu garanto não deixar "lixo" neste diretório.

WS

Talvez alguém possa nos ajudar, isso é muito sério, veja bem, se no formulário eu tiver vários campos com validação, toda vez que tiver um exception ele irá limpar o campo do tipo file e o usuário terá que carregar o arquivo novamente, isso vai processo, e se o arquivo for grande, já imagino que isso pode acarretar no projeto?..

NR

No caso de exception o usuário não precisa selecionar o arquivo novamente. O nome do arquivo fica em um hidden, por isso não é visível.

Caso queira manter também a imagem de confirmação e o nome do arquivo ao lado do input, sugiro declarar a função onSave como static, dessa forma não haverá atualização da tela e os dados serão mantidos.