Como excluir arquivos enviados?

Isso está correto.

Não é possível dizer, já que você editou seu post como ninja, o que não criou uma nova revisão. A primeira versão deste post contém apenas “edited.png”.

Isso me faz pensar que você vinculou a imagem e não a carregou.

Sim, porque você editou seu post muito rápido. Temos uma janela de período de graça de 300 segundos aqui, na qual, se você fizer uma edição, ela não criará uma nova versão do post.

Se você olhar o código-fonte, verá que as imagens são apenas links para o Dropbox.

Essas imagens não foram carregadas. Apenas vinculadas.

Obrigado.

Os links subjacentes já foram excluídos há muito tempo — isso não deveria significar que esses .gif deixariam de aparecer? Ao clicar em “Ver Imagem” no menu de contexto, sou levado para um endereço da comunidade.signalusers; esse é o comportamento esperado?

Estou testando. Vou editar isso fora em ~300 segundos e, logo em seguida, excluir o link.

deleted.png


Edição #2

O link foi excluído, mas a imagem persiste no histórico de edições. Talvez ela não tenha um registro de Upload, já que não é removida pela limpeza automática.

Ela está hospedada em https://d11a6trkgmumsb.cloudfront.net/original/3X/1/0/101f03af29f12ea30e1226eb96a02c3ed2f6d2ef.png. Não é do Dropbox.

Acho que, olhando ao redor, é esperado que a imagem seja mantida localmente quando a opção download_remote_images_to_local está ativada. Acredito que essa seja a configuração relevante.

Então, isso

não está funcionando para esse tipo de upload, conforme demonstrado em minha postagem anterior. Corrija-me se eu estiver errado.

O upload será excluído se a configuração do site “limpar uploads” estiver habilitada, após o período de carência de horas para “limpar uploads órfãos”.

Obrigado pela resposta rápida!

Limpar uploads parece ser uma configuração geral que capturaria todas as imagens com um registro de upload, correto? Não apenas aquelas presentes devido a download_remote_images_to_local. Se for verdade, deveria ser capaz de encontrar exemplos no site de uploads de imagens regulares que não estão sendo removidos como resultado da limpeza automática.

Você se importa se eu perguntar qual é o valor de clean orphan uploads grace period hours configurado aqui, para que eu possa oferecê-lo como solução? Ou ele vem com um padrão?

Se eles decidirem ativar essa configuração, precisarão fazer algo para aplicá-la a posts anteriores?


Edição
Apenas para ser explícito, a ideia aqui é que isso não seja um problema, mas que uma configuração precise ser ativada. Só não quero voltar e dizer “Você precisa ativar isso!” e eles responderem “Já está ativado!”. Eu ficaria sem graça.

Eu também me peguei procurando freneticamente um lugar para navegar pelos uploads (familiar com isso do MediaWiki), porque eu sei que as coisas são enviadas duas, três e até quatro vezes, e às vezes me pergunto onde está um arquivo que eu enviei há algum tempo, mas que talvez tenha sido perdido ou excluído, para que eu possa vinculá-lo em vez de fazer o upload novamente… Acho que há algo a ser dito sobre um navegador de arquivos… :slight_smile:

Também tive que excluir um arquivo carregado de alguma forma. Não temos a tarefa de limpeza ativada, pois alguns arquivos vêm de uma importação de um software de fórum diferente e ainda não foram referenciados corretamente em posts importados. Portanto, precisei encontrar uma maneira manual. O seguinte funciona, mas não é elegante…

  1. Certifique-se de que o upload relevante não esteja mais na versão atual de nenhum post. Dessa forma, o Discourse o considerará órfão e não causará problemas ao excluí-lo.

  2. Use o plugin Data Explorer ou outra maneira de consultar o banco de dados do Discourse para listar uploads órfãos, encontrar o relevante e anotar seu upload_id e filename. Consulta relevante:

    SELECT 
      uploads.id, uploads.user_id, uploads.created_at, 
      uploads.url, uploads.filesize
    FROM uploads
      LEFT OUTER JOIN post_uploads ON uploads.id = post_uploads.upload_id
    WHERE post_uploads.post_id IS NULL
    ORDER BY created_at DESC
    LIMIT 100
    
  3. No banco de dados ou com o console Rails para Discourse, exclua o registro associado da tabela uploads pelo seu ID de upload. Aqui eu uso o console Rails:

    Upload.where(id: 16384).first.delete
    
  4. Exclua o arquivo associado, incluindo todas as versões otimizadas (se houver, aplica-se a imagens) do sistema de arquivos via SSH. Observe o curinga adicionado antes da extensão do arquivo para capturar também as versões otimizadas, que têm um sufixo aqui. Claro,

    cd /path/to/discourse/shared/public/
    find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete
    

Huh! Parece que a imagem referenciada nesta postagem não é capturada por estas configurações:

Por que ela não foi excluída?

Posso também me perguntar por que o Discourse “faz upload” de um arquivo vinculado, como o link do Dropbox aqui? O objetivo de vincular um arquivo específico é, muitas vezes, manter o controle sobre o conteúdo.

Com a alteração de renomear post_uploads para upload_references, a consulta SQL listada na etapa 2 não é mais válida. O código atualizado é:

SELECT 
  uploads.id, uploads.user_id, uploads.created_at, 
  uploads.url, uploads.filesize
FROM uploads
  LEFT OUTER JOIN upload_references ON uploads.id = upload_references.upload_id
WHERE upload_references.target_id IS NULL
ORDER BY created_at DESC
LIMIT 100