Rails 6 - Фильтрация файлов по типам MIME - PullRequest
0 голосов
/ 03 ноября 2019

Я использую CarrierWave / RMagick для загрузки / загрузки версий и отображения их в представлении.

Однако я понял, насколько он сломан, когда пошел загружать файлы (например, docx или PDF). ).

Мне удалось получить файлы для правильной загрузки, используя

  def image?(new_file)
    %w(jpg jpeg gif png).include?(new_file.extension)
  end
  #
  version :thumb, :if => :image? do
    process resize_to_fit: [100, 100]
  end

И, на мой взгляд, я начал комплекс, если / еще используя типы MIME, но я заметил, что это не такне масштабируется, и мне не нравится, насколько он грязный.

В качестве примера

      <% @workflow.attachments.each do |f| %>
        <% if f.content_type.start_with?("image") %>
          <%= image_tag f.thumb.url %>
        <% elsif f.content_type.start_with?("application/zip") %>
          Text File
        <% end %>
      <% end %>

В итоге я выбрал 'application / zip', потому что именно так представляет CarrierWaveэто тип.

есть ли более здоровый способ сделать это? В настоящее время у меня есть черный список, настроенный для отклонения php / js и т. Д., И я в порядке, просматривая каждый тип файла, который я могу «предположить» для загрузки, но наличие основного if / else в представлении (особенно) кажется неправильным.

Я знаю, что я перенесу это в контроллер, как только я выясню правильную логику, но я чувствую, что мне нужно руководство по лучшему способу справиться с этим, пока он не запутался.

...