TFile - BUG URGENTE - AJUDA o Tfile envia para pasta /tmp automaticamente o arquivo com o MESMO nome do arquivo , mesmo antes de salvar o formulário. Mas e se dois usuarios do sistema ( em computadores diferentes , lugar etc) enviar no mesmo instante UM ARQUIVO COM MESMO NOME? O BUG FAZ COM QUE APENAS O ULTIMO ARQUIVO SELECIONADO SEJA SALVO. Era pro Tfile criar NOMES UNICOS NA PAGINAS /TMP , MAS ISSO NÃO ACONTECE! ...
MA
TFile - BUG URGENTE - AJUDA  
o Tfile envia para pasta /tmp automaticamente o arquivo com o MESMO nome do arquivo , mesmo antes de salvar o formulário. Mas e se dois usuarios do sistema ( em computadores diferentes , lugar etc) enviar no mesmo instante UM ARQUIVO COM MESMO NOME? O BUG FAZ COM QUE APENAS O ULTIMO ARQUIVO SELECIONADO SEJA SALVO.

Era pro Tfile criar NOMES UNICOS NA PAGINAS /TMP , MAS ISSO NÃO ACONTECE!

ALGUEM JA LIDOU COM ISSO? OU SEJA TFILE NÃO LIDA COM MAIS DE UM ARQUIVO DE MESMO NOME....

EXEMPLO : se eu enviar dois arquivos PDF com mesmo nome, mas conteudo diferente só um será salvo.

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 (5)


MA

Você pode alterar o arquivo
/lib/adianti/service/AdiantiUploaderService.php
e criar seu mecanismo de nomeação
 
  1. <?php
  2. $folder = 'tmp/';
  3. $response = array();
  4. if (isset($_FILES['fileName']))
  5. {
  6. $file = $_FILES['fileName'];
  7. if( $file['error'] === 0 && $file['size'] > 0 )
  8. {
  9. $path = $folder.$file['name'];
  10. ?>

Um trecho do código do service!
PA

/tmp é temporária, logo após o upload, você deve mover o arquivo para o local definitivo usando sua regra de negócio.
FF

Bom dia.
Marcelo ALves.
Eu também estou com esse problema e ainda tenho a situação de que o mesmo formulário recebe vários arquivos separadamente, um TFile para cada. E só posso mover depois que estiverem validados com os dados do banco. Tem que ser assim com a especificação recebida. Então para solucionar parte do teu problema, você pode fazer com que os arquivos de upload sejam feitos para uma subpasta de 'tmp' com o nome do usuario. Assim, não tem problema se usuários diferentes enviarem o mesmo nome de arquivo. Lembrando que o Pablo disse, não é para deixar os arquivos em 'tmp' para sempre.

Segue o código para modificar a classe /lib/adianti/service/AdiantiUploaderService.php

 
  1. <?php
  2. // alteração para fazer upload para subpasta com nome do login de usuário
  3. $folder = 'tmp/'.TSession::getValue('login').'/';
  4. if (!file_exists($folder)){
  5. mkdir($folder, 0777, true);
  6. }
  7. ?>

FF

Correção: A mensagem era para o "Marcos Antônio" eu coloquei Marcelo Alves. Desculpe.
FF

"Marcos Antônio", para resolver o teu problema de vez, no mesmo arquivo "/lib/adianti/service/AdiantiUploaderService.php", altere esta parte
 
  1. <?php
  2. if( $file['error'] === 0 && $file['size'] > 0 ){
  3. $path = $folder.$file['name'];
  4. ?>


para isso:
 
  1. <?php
  2. if( $file['error'] === 0 && $file['size'] > 0 )
  3. {
  4. $dt = new DateTime();
  5. $prefixo = $dt->format('u').'_';
  6. $path = $folder.$prefixo.$file['name'];
  7. ?>


depois no mesmo arquivo. Altere esta parte
 
  1. <?php
  2. if (is_writable($folder))
  3. {
  4. if( move_uploaded_file( $file['tmp_name'], $path ) )
  5. {
  6. $response['type'] = 'success';
  7. $response['fileName'] = $file['name'];
  8. ?>


para essa:

 
  1. <?php
  2. if (is_writable($folder))
  3. {
  4. $_FILES['fileName'] = str_replace($file['name'], $prefixo.$file['name'], $_FILES['fileName']);
  5. if( move_uploaded_file( $file['tmp_name'], $path ) )
  6. {
  7. $response['type'] = 'success';
  8. $response['fileName'] = $prefixo.$file['name'];
  9. ?>