解決

image_uri = Addressable::URI.convert_path("https://path/to/image.jpg")
URI.parse(image_uri).open do |file|
  metadata = {
    "mime_type" => MIME::Types.type_for(@image_uri.to_s).first.content_type,
    "filename" => @image_uri.basename,
  }

  # metadataが正しく設定されていないと、uploaded_file.metadataも空
  uploaded_file = Shrine.upload(file, storage_key, metadata: metadata)
end

注意

metadataのキーをシンボルにすると設定されないので注意。

shrine/s3.rb at master · shrinerb/shrine · GitHub でmetadataの検索が文字列でなされている為。

shrine_metadata.values_at("mime_type", "filename")