Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
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