Comportamento de Upload de Mídias

Olá, pessoal

Analisando uma instância do Tainacan que está consumindo bastante recursos de armazenamento em um servidor observei que ao listar os ficheiros duplicados com a ferramenta WinDirStat ele informa que vários itens estão duplicados em dois caminhos, sendo um cópia na pasta de uploads e outra na taincan-items:

/var/www/html/wp-content/uploads/2023/06/exemplo.jpeg
/var/www/html/wp-content/uploads/tainacan-items/1032/41949/exemplo.jpeg

Pesquisando encontrei esta entrada na wiki que explica que são dois ambientes de uploads diferentes: a biblioteca de mídia do WordPress e a do Tainacan.

Pelo que entendi da documentação, essa “duplicação” é, na verdade, o comportamento esperado do plugin. O Tainacan cria uma cópia do arquivo em sua própria estrutura de pastas (/tainacan-items/ID_DA_COLEÇÃO/ID_DO_ITEM/) justamente para garantir a integridade e, principalmente, o controle de privacidade daquele item.

A wiki explica que, sem essa restrição, a privacidade não poderia ser garantida, já que um mesmo arquivo não poderia pertencer a um item público e a outro privado simultaneamente.

Portanto, a minha conclusão é que o arquivo que “pertence” ao item e é gerenciado pelo Tainacan é aquele dentro da pasta tainacan-items. A outra cópia, na pasta de uploads padrão do WordPress, provavelmente foi gerada no momento do upload para a biblioteca de mídia, antes de ser vinculada ao item no Tainacan.

Isso significa que, para o correto funcionamento do Tainacan e suas funcionalidades de privacidade, é necessário manter as duas cópias? Ou o arquivo na pasta de uploads genérica (/uploads/ANO/MÊS/) poderia ser removido após a sua incorporação como documento de um item no Tainacan sem causar problemas?


Em uma dúvida relacionada, o segundo fator de alto consumo de armazenamento que identifiquei é a geração de um número excessivo de tamanhos para cada imagem. Observei que, para um único upload, chegam a ser criadas mais de 30 versões com resoluções diferentes (ex: 150x150, 1024x768, 2048x1638, etc.) dentro da pasta do item no Tainacan (/tainacan-items/ID_DA_COLEÇÃO/ID_DO_ITEM/).

Sei que o WordPress, o tema e os plugins (incluindo o Tainacan) registram seus próprios tamanhos de imagem para miniaturas e responsividade. A minha pergunta é: esse número exagerado pode ser resultado de um acúmulo de configurações de diferentes fontes (tema, plugins, etc.), ou o Tainacan por si só pode estar gerando essa quantidade de variações?

Olá @Vinicius_Bard, tudo bem?

Olha, à menos que você tenha definido uma miniatura customizada pro item, você não deveria ter esta duplicação não… quando você envia uma imagem para a galeria de mídias a partir do formulário de edição de item aquela imagem só deveria ir parar na pasta /tainacan-items/.... Você até vai poder ver ela lá na galeria de mídias do WordPress mas se ela foi enviada pelo modal de mídia a partir do Tainacan o local deveria ser o da nossa estrutura mesmo.

Agora sobre os recortes, o Tainacan registra 4 tamanhos:

  • tainacan-small
  • tainacan-medium
  • tainacan-medium-full
  • tainacan-large-full

Mas é comum sim que temas e outros plugins registrem seus próprios tamanhos, especialmente visando ter recortes apropriados para certos templates. Eu sei que tem plugins que permite gerir isso, embora nunca tenha testado a fundo:

Na grande maioria dos cenários onde acessamos uma imagem, tentamos sempre acessar um recorte ‘fallback’ dela no código. De modo que se não for encontrado o recorte no tamanho desejado pelo Tainacan, buscamos a versão mais próxima nos tamanhos do WordPress. Acho que isto pode demandar alguns testes, mas deveria funcionar…

1 curtida

Opa, valeu pela explicação @mateus.m.luna!

Nessa instalação específica enfrentamos uma situação que gera muita redundância de armazenamento. Temos diversos items que são duplicados dentro de uma mesma coleção como iterações por uma escolha institucional, por exemplo: item 1 - porto alegre, item 1 - rio de janeiro… e todos usam exatamente o mesmo anexo.

Existe alguma forma de fazer com que todos esses itens “apontem” para um único arquivo na biblioteca de mídia, em vez de o Tainacan criar uma cópia para cada um?

Pensei em usar a opção de “Documento a partir de URL”, linkando para o arquivo já existente na biblioteca do WordPress. Esse seria o caminho correto? Há alguma desvantagem nessa abordagem se nenhum dos itens é privado?

Uhm… bom, se você usar aquela opção “O link leva para uma imagem externa”,

e colocar como URL o link da imagem si (não da página da imagem) ele vai justamente fazer o que você quer. O que você perde (além da questão da privacidade, mas neste caso não seria um problema) é a otimização que se tem de performance por conta dos recortes… vai sempre mostrar o documento na resolução mais alta.

Uma modelagem um pouco diferente seria criar uma “coleção de mídias”, que ficaria responsável por guardar os documentos. Daí nas outras coleções que vocês tem o documento estaria desabilitado nas configurações da coleção. E usariam um metadado de relacionamento para vincular as coisas. Se o metadado de relacionamento estiver na própria coleção de mídias vocês podem usar o recurso de “Itens relacionados a este”. Com ele habilitado tanto nas configurações de metadado do relacionamento quanto no tema, você pode mostrar a seção de itens relacionados a este com o bloco de galeria de item lançado na Tainacan Beta 0.21.16 - Bloco Galeria de Itens, Exportador XLSX e Mapeadores do INBCM. Isto daria uma certa ilusão visual de que aquilo é o documento do item atual quando na verdade é de outro item…

Em ambos estes casos você provavelmente vai querer definir uma imagem de miniatura de imagem personalizada. Mas miniaturas, felizmente para seu caso, não estão restritas às pasta do item. Tanto que quando você abre o opção pra editar miniatura vai quer que a galeria de mídia aparece com várias imagens, não só as enviadas para o item. Ou seja, elas podem ser reaproveitadas.

1 curtida

Muito obrigado @mateus.m.luna, veremos como iremos seguir para este caso específico, mas já ajudou a levantar boas possibilidades para lidar com as redundâncias desta instância. :grin:

1 curtida