Alterar o nome de um arquivo

Prezados,

Alguém conhece uma maneira para alterar o nome do arquivo em um formulário?

O usuário sempre envia nomes repetidos e com isso gera um problema. Eu gostaria de gerar um nome randômico usando um md5 e substituir o nome do arquivo enviado pelo usuário. Isso necessitaria modificar o nome do arquivo no disco e no banco de dados.

Alguém já sofreu com esse problema?

Obrigado desde já.

No banco de dados o controle é fácil.

Em disco, temos posts aqui que falam a respeito, é só pesquisar.

Boa tarde.
De analisada nesse tutorial talvez possa ajudar:
https://www.youtube.com/watch?v=v_qazAhMF4A&pp=ygUbc2NyaXB0Y2FzZSByZW5vbWVhciBhcnF1aXZv

https://www.youtube.com/watch?v=Mu4itdQV3aw&t=1804s

1 Curtida

Olá, não sei se ainda precisa, mas gostaria de compartilhar minha situação e como resolvi.

Preciso guardar arquivos em pastas que são criadas de acordo com uma Categoria de Arquivos dentro de um Tipo de Material, ou seja, diretórioRaizDeArquivos/TipoDeMaterial/Categoria (As pastas TipoDeMaterial são criadas pelo sistema no momento em que se cadastra um novo tipo de material e as pastas de Categoria são criadas pelo sistema no momento em que se cadastra a categoria).

No formulário de cadastro/upload do arquivo:

  • Criei um campo escondido de nome diretorio;

  • No campo de upload do arquivo ({arq_nomedoc}) informei este campo escondido em Subdiretório para armazenamento local

  • No evento onChange do campo Categoria eu carrego este campo diretorio com a pasta correta do arquivo buscando o Tipo de Material e a Categoria informados (campos obrigatórios);
    sc_lookup(dbDirMat, “select am.amt_diretorio from arquivos.arquivos_material am where am.amt_codigo = {amt_codigo}”); // busca o Tipo de Material
    sc_lookup(dbDirCat, "select ac.cat_diretorio from arquivos.arquivos_categorias ac where ac.cat_codigo = {cat_codigo} "); // Busca a categoria
    {diretorio} = {dbDirMat[0][0]} . “/”. {dbDirCat[0][0]}; // concatena o Tipo de Material com a Categoria.

  • No evento onAfterInsert (preferi renomear o arquivo após a inclusão do registro, pois são apenas 3 usuários que fazem esta atividade e não é ao mesmo tempo) coloco o seguinte código (no meu caso o nome do arquivo é uma combinação de campos do formulário e cadastro de cliente além de usar uma função própria para formatar os números):
    $arquivo_atual = $_SESSION[‘scriptcase’][‘arquivos_frm’][‘glo_nm_path_doc’] . ‘/’ . {diretorio} . ‘/’ . {arq_nomedoc}; // pego o nome do arquivo que foi inserido pelo usuário
    sc_lookup(dbCli, “select cli_cpfcnpj from clientes where cli_codigo = {cli_codigo}”);

    $arqtmp_cli = formatanumero({cli_codigo}, 5);
    $arqtmp_data = substr({arq_datadoc},0,4) . substr({arq_datadoc},5,2) . substr({arq_datadoc},8,2);
    $arqtmp_rela = formatanumero({arq_ano}, 4) . formatanumero({arq_identificacao}, 5) . formatanumero({arq_relatorio}, 2);
    $arqtmp = $arqtmp_cli . ‘’ . {dbCli[0][0]} . '’ . $arqtmp_data . ‘_’ . $arqtmp_rela . ‘.pdf’;
    $arquivo_novo = $_SESSION[‘scriptcase’][‘arquivos_frm’][‘glo_nm_path_doc’] . ‘/’ . {diretorio} . ‘/’ . $arqtmp; // seta o novo nome do arquivo com o caminho

    rename($arquivo_atual, $arquivo_novo); // renomeia o arquivo

    sc_exec_sql (" update arquivos.arquivos set arq_nomedoc = ‘".$arqtmp."’ where arq_ano = {arq_ano} and arq_identificacao = {arq_identificacao} and arq_relatorio = {arq_relatorio}"); // atualiza o nome do arquivo no banco de dados.
    sc_commit_trans ();