Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Upload com mesmo nome Quando faço upload de um arquivo com mesmo nome já existente, percebi que ele sobrepõe, o que fazer nesse caso?...
Z
Upload com mesmo nome  
Quando faço upload de um arquivo com mesmo nome já existente, percebi que ele sobrepõe, o que fazer nesse caso?

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

Este comportamento é esperado.
O que vc pode fazer é renomear o arquivo adicionando na frente dia/mes/ano e hora.
Assim todas vez que subir um arquivo ele não será sobreposto.
Z

Ok, qual parte faria isso?
Também gostaria de remover o caminho que ele gera colocando pastas 1 , 2 , 3
MG

Posta o código que usa hoje para analisarmos como vc faz.
Existem várias formas....
Z

Estou usando o Adinti Builder, não mexi no código.

conforme o link da imagem.
https://prnt.sc/nc9o3e
MG

Opa, posta o código que foi gerado pelo builder.
Z

  1. <?php
  2. //<fileHeader>
  3. //</fileHeader>
  4. class CategoriasForm extends TPage
  5. {
  6.     protected $form;
  7.     private $formFields = [];
  8.     private static $database 'painel';
  9.     private static $activeRecord 'Categorias';
  10.     private static $primaryKey 'id_categorias';
  11.     private static $formName 'form_Categorias';
  12.     //<classProperties>
  13.     //</classProperties>
  14.     use Adianti\Base\AdiantiFileSaveTrait;
  15.     /**
  16.      * Form constructor
  17.      * @param $param Request
  18.      */
  19.     public function __construct$param )
  20.     {
  21.         parent::__construct();
  22.         // creates the form
  23.         $this->form = new BootstrapFormBuilder(self::$formName);
  24.         // define the form title
  25.         $this->form->setFormTitle('Cadastro de categorias');
  26.         //<onBeginPageCreation>
  27.         //</onBeginPageCreation>
  28.         $id_categorias = new TEntry('id_categorias');
  29.         $situacao = new TRadioGroup('situacao');
  30.         $categoria = new TEntry('categoria');
  31.         $descricao = new THtmlEditor('descricao');
  32.         $imagem = new TFile('imagem');
  33.         $posicao = new TEntry('posicao');
  34.         $data_cadastro = new TDateTime('data_cadastro');
  35.         $data_atualizacao = new TDateTime('data_atualizacao');
  36.         $log_usuario = new TEntry('log_usuario');
  37.         $situacao->addValidation('Situação', new TRequiredValidator()); 
  38.         $categoria->addValidation('Categoria', new TRequiredValidator()); 
  39.         $imagem->addValidation('Imagem', new TRequiredValidator()); 
  40.         $posicao->addValidation('Posicao', new TRequiredValidator()); 
  41.         $situacao->addItems(['Ativa'=>'Ativa','Inativa'=>'Inativa']);
  42.         $situacao->setLayout('horizontal');
  43.         $situacao->setValue('Ativa');
  44.         $imagem->enableFileHandling();
  45.         $imagem->setAllowedExtensions(["jpeg","jpg","gif"]);
  46.         $categoria->autofocus 'autofocus';
  47.         $data_cadastro->setMask('dd/mm/yyyy hh:ii');
  48.         $data_atualizacao->setMask('dd/mm/yyyy hh:ii');
  49.         $data_cadastro->setDatabaseMask('yyyy-mm-dd hh:ii');
  50.         $data_atualizacao->setDatabaseMask('yyyy-mm-dd hh:ii');
  51.         $log_usuario->setEditable(false);
  52.         $id_categorias->setEditable(false);
  53.         $data_cadastro->setEditable(false);
  54.         $data_atualizacao->setEditable(false);
  55.         $situacao->setSize(80);
  56.         $imagem->setSize('71%');
  57.         $posicao->setSize('10%');
  58.         $categoria->setSize('70%');
  59.         $id_categorias->setSize(100);
  60.         $data_cadastro->setSize(150);
  61.         $log_usuario->setSize('20%');
  62.         $descricao->setSize('70%'110);
  63.         $data_atualizacao->setSize(150);
  64.         $row1 $this->form->addFields([new TLabel('Código:'null'14px'null)],[$id_categorias]);
  65.         $row2 $this->form->addFields([new TLabel('Situação:''#ff0000''14px'null)],[$situacao]);
  66.         $row3 $this->form->addFields([new TLabel('Categoria:''#ff0000''14px'null)],[$categoria]);
  67.         $row4 $this->form->addFields([new TLabel('Descrição:'null'14px'null)],[$descricao]);
  68.         $row5 $this->form->addFields([new TLabel('Imagem:''#ff0000''14px'null)],[$imagem]);
  69.         $row6 $this->form->addFields([new TLabel('Posicão:''#ff0000''14px'null)],[$posicao]);
  70.         $row7 $this->form->addFields([new TLabel('Data cadastro:'null'14px'null)],[$data_cadastro]);
  71.         $row8 $this->form->addFields([new TLabel('Data atualização:'null'14px'null)],[$data_atualizacao]);
  72.         $row9 $this->form->addFields([new TLabel('Log usuário:'null'14px'null)],[$log_usuario]);
  73.         //<onAfterFieldsCreation>
  74.         //</onAfterFieldsCreation>
  75.         // create the form actions
  76.         $btn_onsave $this->form->addAction('Salvar', new TAction([$this'onSave']), 'fa:floppy-o #ffffff');
  77.         $btn_onsave->addStyleClass('btn-primary'); 
  78.         $btn_onclear $this->form->addAction('Limpar formulário', new TAction([$this'onClear']), 'fa:eraser #dd5a43');
  79.         $btn_onshow $this->form->addAction('Listar', new TAction(['CategoriasList''onShow']), 'fa:list #000000');
  80.         // vertical box container
  81.         $container = new TVBox;
  82.         $container->style 'width: 100%';
  83.         $container->class 'form-container';
  84.         $container->add(TBreadCrumb::create(['Produtos','Cadastro de categorias']));
  85.         $container->add($this->form);
  86.         //<onAfterPageCreation>
  87.         //</onAfterPageCreation>
  88.         parent::add($container);
  89.     }
  90. //<generated-FormAction-onSave>
  91.     public function onSave($param null
  92.     {
  93.         try
  94.         {
  95.             TTransaction::open(self::$database); // open a transaction
  96.             /**
  97.             // Enable Debug logger for SQL operations inside the transaction
  98.             TTransaction::setLogger(new TLoggerSTD); // standard output
  99.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  100.             **/
  101.             $messageAction null;
  102.             $this->form->validate(); // validate form data
  103.             $object = new Categorias(); // create an empty object //</blockLine>
  104.             $data $this->form->getData(); // get form data as array
  105.             $object->fromArray( (array) $data); // load the object with data
  106.             //--------------------------------
  107.             //Verifica se registro ja esta em uso no banco
  108.             if(!$object->id_categorias
  109.             {
  110.                 $result Categorias::where('categoria',  '='$object->categoria)
  111.                         ->first();
  112.             }
  113.             else 
  114.             {
  115.                 $result Categorias::where('categoria',  '='$object->categoria)
  116.                         ->where('id_categorias''<>'$object->id_categorias)
  117.                         ->first(); 
  118.             }
  119.             if(!empty($result->categoria)) 
  120.             {
  121.                 new TMessage('error'"Categoria já esta em uso");
  122.                 return false
  123.             }  
  124.             // se não tiver id é um registro novo então devemos salvar a data de inserção do registro
  125.             if(!$object->id_categorias
  126.             {
  127.                 $object->data_cadastro date('Y-m-d H:i:s');
  128.             }
  129.             else
  130.             {
  131.                 // sempre salvamos a data de atualização do registro
  132.                 $object->data_atualizacao date('Y-m-d H:i:s');
  133.             }
  134.             //grava log do usuario
  135.             //$object->log_usuario = TSession::getValue('username');
  136.             $object->log_usuario TSession::getValue('login');
  137.             //----------------------------
  138.             //</beforeStoreAutoCode> //</blockLine> 
  139. //<generatedAutoCode>
  140.             $imagem_dir '../imagens/produtos';
  141. //</generatedAutoCode> 
  142.             $object->store(); // save the object //</blockLine>
  143.             //</afterStoreAutoCode> //</blockLine>
  144.  //<generatedAutoCode>
  145.             $this->saveFile($object$data'imagem'$imagem_dir);
  146. //</generatedAutoCode>
  147.             // get the generated {PRIMARY_KEY}
  148.             $data->id_categorias $object->id_categorias//</blockLine>
  149.             $this->form->setData($data); // fill form data
  150.             TTransaction::close(); // close the transaction
  151.             /**
  152.             // To define an action to be executed on the message close event:
  153.             $messageAction = new TAction(['className', 'methodName']);
  154.             **/
  155.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'), $messageAction);
  156.             //</endTryAutoCode> //</blockLine>
  157.         }
  158.         catch (Exception $e// in case of exception
  159.         {
  160.             //</catchAutoCode> //</blockLine>
  161.             new TMessage('error'$e->getMessage()); // shows the exception error message
  162.             $this->form->setData$this->form->getData() ); // keep form data
  163.             TTransaction::rollback(); // undo all pending operations
  164.         }
  165.     }
  166. //</generated-FormAction-onSave>
  167. //<generated-onEdit>
  168.     public function onEdit$param )//</ini>
  169.     {
  170.         try
  171.         {
  172.             if (isset($param['key']))
  173.             {
  174.                 $key $param['key'];  // get the parameter $key
  175.                 TTransaction::open(self::$database); // open a transaction
  176.                 $object = new Categorias($key); // instantiates the Active Record //</blockLine>
  177.                 //</beforeSetDataAutoCode> //</blockLine>
  178.                 $this->form->setData($object); // fill the form //</blockLine>
  179.                 //</afterSetDataAutoCode> //</blockLine>
  180.                 TTransaction::close(); // close the transaction 
  181.             }
  182.             else
  183.             {
  184.                 $this->form->clear();
  185.             }
  186.         }
  187.         catch (Exception $e// in case of exception
  188.         {
  189.             new TMessage('error'$e->getMessage()); // shows the exception error message
  190.             TTransaction::rollback(); // undo all pending operations
  191.         }
  192.     }//</end>
  193. //</generated-onEdit>
  194.     /**
  195.      * Clear form data
  196.      * @param $param Request
  197.      */
  198.     public function onClear$param )
  199.     {
  200.         $this->form->clear(true);
  201.         //<onFormClear>
  202.         //</onFormClear>
  203.     }
  204.     public function onShow($param null)
  205.     {
  206.         //<onShow>
  207.         try
  208.             {
  209.                     //--------------------------------
  210.                     // Posicao
  211.                     TTransaction::open(self::$database); // open a transaction
  212.                     $result null;
  213.                     $result Categorias::select('posicao','id_categorias')
  214.                             ->orderBy('id_categorias''desc')
  215.                             ->first();
  216.                     if(!empty($result->posicao))
  217.                     {
  218.                         $posicao $result->posicao 2;
  219.                     }
  220.                     else
  221.                     {
  222.                         $posicao 2;
  223.                     }
  224.                     $object = new stdClass();
  225.                     $object->posicao $posicao;
  226.                     TForm::sendData(self::$formName$object);
  227.                     TTransaction::close(); // close the transaction
  228.             }
  229.             catch (Exception $e)
  230.             {
  231.                 new TMessage('erro'$e->getMessage());
  232.                 return false;       
  233.             }
  234.         //</onShow>
  235.     
  236.     //</hideLine> <addUserFunctionsCode/>
  237.      //<generated-userFunction-onYes>
  238.     public static function onYes($param null
  239.     {
  240.         try 
  241.         {
  242.             //code here
  243.         }
  244.         catch (Exception $e
  245.         {
  246.             new TMessage('error'$e->getMessage());    
  247.         }
  248.     }
  249. //</generated-userFunction-onYes>
  250.      //<generated-userFunction-onNo>
  251.     public static function onNo($param null
  252.     {
  253.         try 
  254.         {
  255.             //code here
  256.         }
  257.         catch (Exception $e
  258.         {
  259.             new TMessage('error'$e->getMessage());    
  260.         }
  261.     }
  262. //</generated-userFunction-onNo>
  263.     //<userCustomFunctions>
  264.     //</userCustomFunctions>
  265. }
  266. </code>
MG

Tenta isso:

Na linha 182, no método onSave, vocẽ define o diretório.
Todo o tratamento é feito pela Trati AdiantiBaseAdiantiFileSaveTrait;
O arquivo, no seu caso, está com id "imagem".
Antes de "$object->store()", mude o nome como por exemplo:

$object->imagem = date('ymdHis').'_'.$object->imagem;
$object->store();
Z

Não deu, mas ates ele copia para a pasta tmp, tenho que fazer o tratamento já ali, pois se colocar duas imagens iguais ali, já dá problemas,
MG

Veja na linha destacada abaixo, o 3o. parâmetro e nome do arquivo.
Está fixo 'imagem'. Crie uma variável, dê o nome que deseja, e passe como parâmetro no lugar dele.

  1. <?php
  2.  $this->saveFile($object$data'imagem'$imagem_dir);
  3. ?>


FF

Bom dia zsvendo.
Tive os mesmos problemas mas não poderia deixar para tratar no onSave do formulário etc... minha solução está aqui:

https://www.adianti.com.br/forum/pt/view_5004?upload-com-mesmo-nome

Não gosto de alterar diretamente as classes do framework... mas a necessidade e a urgência falam mais alto.... hahaha abraço