[RESOLVIDO] Mudar nome do arquivo do upload ao salvar no servidor

Olá pessoal,

Preciso mudar o nome dos arquivos do upload para salvar no servidor

Hoje, no banco (utilizo o tipo [Domumento - Nome do arquivo]) eu já salvo o nome do arquivo com uma mascara, onde essa é composta pelo ano corrente e pelos 10 primeiros caracteres do hash (do nome do aquivo) gerado.
Porém, além de salvar com este nome no bd, preciso alterar também o nome do arquivo que será gravado no servidor.

Fiz um código php para gravar no servidor com o nome da mascara, porém, meu problema está no momento de passar isso para o scriptcase (sou iniciante).

Cod php:
[i]

<?php $nome_temporario = $_FILES["Arquivo"]["tmp_name"]; $nome_real = $_FILES["Arquivo"]["name"]; $nome_hash = md5($nome_real); $length_Hash = substr($nome_hash,0,10); $_ano = date('y'); $nome_final = $_ano . $length_Hash . ".pdf"; copy($nome_temporario,"files/$nome_final"); ?>

[/i]

Desde já, agradeço muito quem puder ajudar.

Renata T.R.

Olá Renata tenta assim:

//{Arquivo} é a variavel que vai receber, a que definiu no seu formulario de upload
//o local coloca o caminho completo do servidor até o destino do arquivo
//O ScriptCase tem uma for que usam o $this->Ini->path_doc mas comigo não deu certo…

$ArqImp = “/home/user/public_html/diretorio/”.{Arquivo};

$nome_hash = md5($ArqImp);
$length_Hash = substr($nome_hash,0,10);
$_ano = date(‘y’);

$nome_final = $_ano . $length_Hash . “.pdf”;

copy($ArqImp,"/home/user/public_html/diretorio/$nome_final");

Somente apos submeter o formulário que o arquivo fica disponível na pasta registrada na propriedade $this->Ini->path_doc.

Tentei a solução do Jair, mas deu o seguinte erro:
copy(D:/NetMake/v9/wwwroot/scriptcase/file/doc/190ff613a9c9.pdf): failed to open stream: No such file or directorycopy(D:/NetMake/v9/wwwroot/scriptcase/file/doc/190ff613a9c9.pdf): failed to open stream: No such file or directory

O arquivo continua sendo salvo no servidor, mas com o nome original.

Obs1: Eu alterei a variável {Arquivo} pois esse form foi a que eu fiz de exemplo, sem o scriptcase. Logo, foi um form criado por mim manualmente.
Como o form do scriptcase é gerado automaticamente quando criamos uma nova aplicação, para descobrir qual a variável referente ao input do upload, eu inspecionei a página. Acho que foi uma das coisas que possa ter dado problema. Talvez não tenha pego a variável correta.

Obs2: Seria mais fácil alterar o nome do arquivo após ele já ter sido salvo no servidor?

não esta achando o local, voce colocou o copy no OnValidate? que só vai pegar após enviar o formulário

o nome do campo é a variável, só usar o mesmo nome do campo que esta usando para a seleção do arquivo entre chaves {nomecampo}

neste campo tem uma opção subdiretorio e criar caso não exista, coloque nele : /file/doc
e em Aplicação->configuração->Caminho dos Documentos coloque : D:/NetMake/v9/wwwroot/scriptcase/

Não coloquei o copy dentro do onValidete.
O que fiz foi criar um método php daquele bloco de código e chamei o método no onAfterInsert.

Olá pessoal,

Primeiro, obrigada pela ajuda de todos!

Consegui resolver o problema, e acabei identificando que ao invés do copy, eu precisava usar o rename, pois estava acontecendo o seguinte “problema”:

Como o meu teste php foi criado por mim manualmente e não no scriptcase, nenhum código foi gerado automático, assim como acontece quando criamos uma aplicação (no SC).

Quando tenho um campo de upload no scriptcase, todo o mecanismo para subir o arquivo no servidor é gerado automático.
Por isso, eu usei a função rename() pois o arquivo já existia na pasta.

Segue abaixo como ficou a solução:

Métodos PHP

// ### MaskNomeArq() - Criar máscara para nome do arquivo
// Hash MD5 do nome do arquivo
$hash = md5({dcm_nome});

// Armazena os 10 primeiros caracteres do hash gerado
$length_Hash = substr($hash,0,10);

// Ano corrente (Aletara para o ano do arquivo)
$_ano = date('y');

// Concatenando os 2 últimos dígitos do ano com lenght_hash 
{dcm_nome} = $_ano . $length_Hash .".pdf"; 

 //--------------------------------------------------------------

// ### RenameArq() - Alterar nome do arquivo
// Var recebe o caminho do arquivo + o nome original
$ArqImp = [glo_path_app] . "/" . [glo_dcm_nome];

//Altera o nope do arquivo salvo no servidor
rename($ArqImp,"[glo_path_app]/[glo_dcm_mask]");

No onScriptInit

// Variável global recebe caminho do arq.
$path_app = $_SESSION['scriptcase']['form_dbo_tbl_dcm']['glo_nm_path_doc'] . "/dcm_digital/Abril";
[glo_path_app] = $path_app;

No onBeforeInsert

// Variável global recebe nome do arq. sem a máscara
[glo_dcm_nome] = {dcm_nome};

// Métodos PHP 
MaskNomeArq();

// Variável global recebe nome do arq. com a máscara
[glo_dcm_mask] = {dcm_nome};

No onAfterInsert

[code]
//Renomeia nome do arq. salvo no servidor
RenameArq();

//Limpa a var. global referente ao nome original do arquivo
[glo_dcm_nome] = “”;[/code]

Prezada e Prezados

Esse procedimento encontrado pela renata, funcionaria para um servidor na nuvem? Eu tenho esse procedimento de upload, mas subo ele para um servidor na nuvem.
Alguém já fez isso antes?
Obrigado.

Prezado,

Também preciso dessa solução. Você conseguiu resolver?

:point_up_2:t2::point_up_2:t2::point_up_2:t2::point_up_2:t2::point_up_2:t2::point_up_2:t2:
……………………

Tópico antigo, sugiro abrir um novo

1 Curtida