SC
Alterar nome de imagem upload TFile
Gostaria de alterar o nome de imagens que são carregadas pelo Tfile, já tentei tudo e não consegui, se alguém tiver uma solução fácil sem fazer alteração no Objeto do FrameWork.
Mostre o que você está tentando fazer que fica mais fácil de ajudar
Nataniel obrigado pelo interesse na ajuda, eu gostaria de fazer upload de uma imagem e independente do nome dela antes do upload, apos o upload ela teria sempre o mesmo nome Ex.: logo2.png
Você pode controlar isso na função onSave. Pode usar a função rename ou copy para renomear o arquivo temporário do upload para o nome que quiser.
Se ainda tiver dúvidas poste aqui a onSave
Faz dessa forma:
class Arquivo extends TPage{
private $form;
function __construct(){
parent::__construct();
// criando form
$this->form = new TQuickForm('form_arq');
$this->form->class = 'tform';
$this->form->setFormTitle('Salvar Arquivo de Imagem');
$arq = new TFile('arq');
$this->form->addQuickFields('',[ $arq ] );
$arq_action = new TAction(array($this, 'onArq'));
$arq->setCompleteAction($arq_action);
$vbox = new TVBox;
$vbox->add($this->form);
$vbox->style = 'width:100%';
parent::add($vbox);
}//fim do construtor
public static function onArq($param){
var_dump($param);
$nome = $param['arq'];
echo "<pre>{$nome}</pre>";
}
}
Nataniel Rabaioli, justamente nesta function que tentei alterar nome, tem que usar urldecode e depois codificar novamente
public function onSave( $param )
{
try
{
TTransaction::open('marca');
$this->form->validate();
$data = $this->form->getData();
$object = new Configuracao('images');
$object->fromArray( (array) $data);
$object->store(); // save the object
$this->saveFile($object, $data, 'file', 'app/');
$this->form->setData($data);
TTransaction::close();
new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
$this->form->setData( $this->form->getData() );
TTransaction::rollback();
}
}
Nataniel Rabaioli, justamente nesta function que tentei alterar nome, tem que usar urldecode e depois codificar novamente
public function onSave( $param )
{
try
{
TTransaction::open('marca');
$this->form->validate();
$data = $this->form->getData();
$object = new Configuracao('images');
$object->fromArray( (array) $data);
$object->store(); // save the object
$this->saveFile($object, $data, 'file', 'app/');
$this->form->setData($data);
TTransaction::close();
new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
$this->form->setData( $this->form->getData() );
TTransaction::rollback();
}
}
Francisco Dorgam você trocou o nome na construção do form?
Esta função salva as extensões (gif,png, jpeg,jpg), converte sempre para mesmo nome e transforma em ".png". Eu trabalhei no sentido de criar uma logo para empresa, se alguém tiver alguma ideia, esta funcionando, mas boas ideias são sempre bem vindas.
public function onSave( $param )
{
try
{
TTransaction::open('marca');
$this->form->validate();
$data = $this->form->getData();
$upfile = json_decode(urldecode($data->file));
$path_parts = pathinfo($upfile->fileName);
if (($path_parts['filename'].'.'.$path_parts['extension']) != ('logo2.'.$path_parts['extension']) )
{
rename("tmp/".$path_parts['filename'].'.'.$path_parts['extension'], "app/images/logo2.".$path_parts['extension']);
$data->file = "app/images/logo2.".$path_parts['extension'];
}
$image = "app/images/logo2.".$path_parts['extension'];
switch (exif_imagetype($image)) {
case IMAGETYPE_PNG :
$img = imagecreatefrompng($image);
break;
case IMAGETYPE_GIF :
$img = imagecreatefromgif($image);
break;
case IMAGETYPE_JPEG :
$img = imagecreatefromjpeg($image);
break;
default :
throw new InvalidArgumentException('Invalid image type');
}
$filename = "app/images/logo2.png";
imagepng($img, $filename);
$object = new Configuracao('images');
$object->fromArray( (array) $data);
$object->store();
$this->saveFile($object, $data, 'file', 'app/');
$this->form->setData($data);
TTransaction::close();
new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
$this->form->setData( $this->form->getData() );
TTransaction::rollback();
}
}
Bom dia Saúde Catalão.
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