Código de identificação de upload restritivo torna difícil escrever componentes de tema que usam ativos enviados

Olá a todos,

Recentemente, escrevi um componente de tema do Discourse (GitHub - Beholder-Vision/discourse-insert-model-3d: A Discourse theme component for adding 3D models to topics) que permite aos administradores do Discourse habilitar o upload e a exibição de modelos 3D em seus fóruns.

As coisas pareceram funcionar bem no início até que recebi um relato de que alguns modelos enviados haviam desaparecido, e então, ao verificar meu próprio fórum, vi que os ativos enviados (modelos 3D e imagens de pôster) também haviam sido expurgados Insert Model 3D - #2 by patrickemin.

Lendo a documentação (Understanding Uploads, Images, and Attachments), presumi que os ativos enviados estariam bem porque eram referenciados por uma postagem, mas depois de investigar um pouco, encontrei este código, discourse/app/models/post.rb at 03bb43f7468d3aa6e73bba0805193ae50c7ec2d5 · discourse/discourse · GitHub que parece estar fazendo o trabalho de identificar uploads no servidor. Pelo que consigo entender, um arquivo enviado só é contado como referenciado por uma postagem se for referenciado por uma das tags HTML limitadas. Portanto, um upload vinculado será reconhecido se referenciado pelo atributo href de um elemento , mas não se for referenciado pelo atributo src de um elemento (que é o que meu novo componente de tema adiciona).

Alguém familiarizado com esse código pode confirmar se meu entendimento está correto ou não? Se estiver correto, acho que as pessoas que criam componentes de tema podem marcar os ativos como uploads gerando um link oculto que referencia o ativo, mas seria muito útil se a documentação (Understanding Uploads, Images, and Attachments) pudesse ser atualizada para destacar essa armadilha.

Muito obrigado
Alan

3 curtidas

Seus parâmetros e src vêm de um parse JSON, então fazer isso automaticamente parece complicado (para dizer o mínimo).

Eu sinto que, em um nível fundamental, isso está pedindo para a API “anexar permanentemente” um upload a uma postagem e sinalizá-lo de forma que ele nunca seja limpo.

Isso abre as comportas para outros problemas (onde posso ver quais uploads estão anexados permanentemente? Quais são os limites?).

Dito isso, o anexo permanente parece ser a única maneira limpa de resolver isso.

Um link oculto funcionará como uma solução alternativa.

Estou mudando isso para uma solicitação de recurso porque está funcionando como projetado, mas a API não está facilitando sua vida aqui.

Vou sinalizar a equipe dev-xp, que pode ter mais pensamentos sobre isso.