Renomeando arquivos enviados

Recentemente, tenho feito o upload de arquivos PDF de apresentações acadêmicas (para este tópico sobre previsão climática sazonal, por acaso).

A convenção de nomenclatura que utilizo é:

  • 0000-autorprincipal-[etal-]titulo-titulo-titulo.pdf

Até aqui tudo bem. Até que descubro que o nome do autor principal está errado. Mas, quando tento fazer o upload do mesmo arquivo com um nome corrigido, o Discourse percebe que o arquivo é idêntico — imagino que haja algum tipo de hash envolvido — e fornece uma referência ao arquivo original, mantendo o nome inalterado e ainda incorreto.

Minha solução alternativa é alterar a seguinte configuração para 1 (o padrão é 48), remover todas as referências na marcação e aguardar até que a exclusão do arquivo ocorra:

  • Settings > Files > clean orphan uploads grace period hours

Também tentei definir esse parâmetro específico como 0, mas isso não parece ter funcionado. Nesse caso, a dica de ferramenta poderia ser melhor modificada para: “Para desativar o período de carência, defina como 0”. Ou, alternativamente, conforme apropriado: “Para ativar um efeito quase imediato, defina como 0”.

Não consigo saber com que frequência esse tipo de manutenção é realmente executado, mas eu presumia que fosse a cada hora? Talvez seja diariamente? Seria útil saber disso também.

Agradeço desde já qualquer ajuda sobre como acelerar esse processo de renomeação de arquivos! Tenho uma solução alternativa, mas ela é bastante desajeitada e lenta.

A cada hora…

Não sendo familiar com Ruby, mas isso também parece que 0 significa 1. Talvez a dica do parâmetro também devesse dizer: “Um valor de 0 é interpretado como 1.” ou algo similar. Especialmente porque o zero frequentemente tem o significado especial de desativar em outras circunstâncias. Obrigado @neounix.

Acho que o que você quer fazer é atualizar o registro de upload no console do Rails, se você tiver uma instalação própria. Duvido que exista uma maneira de fazer isso com a API, mas não verifiquei.

Nós somos auto-hospedados. Foi-me oferecido acesso a uma conta shell, mas ainda não dei seguimento a isso. Obrigado pela dica.

Espere. Não tenho certeza do que você está tentando fazer. É para alterar o nome que as pessoas veem nos posts em que são carregados? Se for esse o caso, talvez você queira fazer algo como

rake posts:remap["old-name.pdf","newname.pdf"]

Como descrito em Substituir uma string em todos os posts. Acredito que, para o seu caso, o nome original do arquivo no modelo Upload não importa muito.

Mas você pode alterá-lo com

u=Upload.find_by(original_filename: 'mypretty-w9.pdf')
u.original_filename='better-name.pdf'
u.save

Tentei reconstruir um post com esse upload e nada aconteceu.

EDIT:

def rename_upload(old_name, new_name)
  u=Upload.find_by(original_filename: old_name)
  u.original_filename=new_name
  u.save
end

Se você colar isso, poderá executar

rename_upload('name.pdf','better-name.pdf')

Isso corrigirá o problema para que os downloads recebam o nome de arquivo melhor.

Na minha vida anterior como acadêmico, eu tinha minha maneira específica de nomear meus PDFs, diferente de qualquer outra pessoa; tenho certeza de que minha esposa tem a dela. Acredito que ninguém vai gostar dos seus nomes de arquivo, mesmo quando você os colocar “certos”. :wink:

Não era isso que eu estava tentando fazer. A string leadauthor fazia parte do nome do arquivo. Só isso. Mas, quando revisei o nome do arquivo (porque meu entendimento das convenções de nomenclatura familiar para acadêmicos espanhóis é muito limitado) e tentei fazer o upload do arquivo renomeado, o Discourse percebeu que havia um arquivo idêntico em seu manifesto e trocou para o nome de arquivo e destino originais. Acho que isso poderia ser considerado um recurso? :roll_eyes: Só consegui fazer o upload do arquivo com o nome corrigido depois de remover aquele arquivo do banco de dados do site. Agradeço muito sua ajuda e interesse, @pfaffman.

Onde você vê o “filename”? O nome real do arquivo no sistema de arquivos é uma string aleatória.

Após testar na minha instância, você pode alterar o nome do arquivo em [filename.pdf|attachment](upload://filehash.pdf) e, embora o post mostre filename.pdf, o download ainda ocorre com o nome original. Acredito que seja a mesma coisa que ele deseja: renomear o nome do arquivo usado no momento do download.

Não é algo crítico, mas também gostaria de poder renomear os uploads.

Oh. Ok. Então as três linhas de código Rails fazem o que você quer. Isso não altera o que você vê nas postagens, mas se você clicar no arquivo, ele será salvo com o nome “better-name.pdf”.

Obrigado a todos que responderam.