Altere o nome do arquivo baixado (disposição do conteúdo) com Paperclip e S3

Se estiver usando Rails e Paperclip com S3, você pode escolher qual será o nome do arquivo baixado definindo o cabeçalho “content disposition”:

class User < ActiveRecord::Base
has_attached_file
:avatar, s3_headers: -> avatar { {
content_type
: 'image/jpeg',
content_disposition
: 'attachment; filename="default_name.jpg"'
} }
end

A disposição do conteúdo é definida no momento do upload, mas você pode alterá-la mais tarde:

user = User.find(id)
s3_object
= user.avatar.s3_object
s3_object
.copy_to(
s3_object
,
metadata_directive
: 'REPLACE',
content_disposition
: 'attachment; filename="new_name.jpg")'

Você deve “substituir” os metadados , mesmo se estiverem em branco, caso contrário, o S3 não permitirá que você copie o arquivo sobre ele mesmo (gerará um erro).