Visualizando imagens em tamanho real

O problema é que o CDN está apresentando um comportamento quebrado, que é exatamente o que você não quer. Apenas o não-CDN funciona corretamente, pois ao clicar em “download”, algo é efetivamente baixado.

Ah, sim, então devemos corrigir.

Justo. Existem exemplos de personalização da lightbox que eu possa usar como ponto de partida?

Isso não é facilmente hackeável, conforme:

Você precisaria ler Magnific Popup: Responsive jQuery Lightbox Plugin e verificar se é possível reconfigurá-lo dinamicamente de alguma forma.

Que pena, vou ver se consigo resolver algo.

Apenas por curiosidade: por que o Discourse opta por uma ação de ‘download’ em vez de ‘ver tamanho original’ aqui? Do ponto de vista do usuário, parece que ver o tamanho original seria uma ação mais comum?

Eu achei que fosse um problema de MIME, mas olhando o cabeçalho, pode ser:

x-download-options: noopen

O que impede que um arquivo seja aberto ao ser baixado. Esperando que Sam possa esclarecer.

:man_shrugging:t4: É uma decisão do @codinghorror. Suponho que seja uma maneira de manter limpo o nome original do arquivo carregado, algo que algumas pessoas valorizam. Além disso, parece ser o que o Flickr costuma fazer.

Acho que não vamos mexer em nada disso. Vamos fazer com que o app faça o proxy disso em uma rota dedicada ou algo assim. O número de pessoas clicando em “download” é insignificante, então um desvio do CDN pode ser aceitável aqui. De qualquer forma, o @pmusaraj pode decidir qual é a melhor solução. Pelo que entendi, ou precisamos instruir a AWS a fornecer uma URL assinada com um disposition de conteúdo especial, ou precisamos fazer o proxy do arquivo. Em ambos os casos, haverá um desvio do CDN da S3. Se fizermos o proxy pelo app, pelo menos poderemos usar o CDN do próprio app.

Após uma leitura um pouco mais aprofundada, parece que content-disposition: attachment; e x-download-options: noopen são responsáveis por esse comportamento.

Agradeço que essa seja a forma como acontece, e não o porquê. Se for por motivos de segurança, faz todo o sentido.

Esse PR deve corrigir o problema da seguinte forma:

  1. Adicionar um data-download-href ao link de download da lightbox quando os uploads S3 estiverem habilitados
  2. A URL utilizada é o novo esquema de URL curta com um parâmetro dl=1, que fará com que o controlador gere uma URL assinada do S3 com o content disposition e o nome do arquivo corretos

Em outras palavras, o link de download na lightbox agora se parecerá com /uploads/short-url/mTGbg4Ld2iBYAbfTvEjGXP2LtVm.pdf?dl=1, que redirecionará para uma URL assinada do S3 com content-disposition: "attachment; filename=original.png".

Acho que essa é a opção mais simples e direta; fazer o proxy através do aplicativo seria um pouco menos eficiente, pois o arquivo baixado teria que ir do S3 para o servidor do Discourse e, em seguida, para o cliente.