Подтвердить что ты не робот

Как вы получаете доступ к необработанному содержимому файла, загруженного с помощью программы "Скрепка/Ruby on Rails"?

Я использую Paperclip/S3 для загрузки файлов. Я загружаю текстовые файлы (не .txt, но они по существу являются .txt). В диспетчере показов я хочу получить содержимое загруженного файла, но не вижу его в качестве одного из его атрибутов. Что я могу сделать здесь?

attachment_file_name: "test.md", attachment_content_type: "application/octet-stream", attachment_file_size: 58, attachment_updated_at: "2011-06-22 01:01:40"

PS - Кажется, что все учебники Paperclip посвящены изображениям, а не текстовым файлам.

4b9b3361

Ответ 1

Здесь я получаю доступ к исходному содержимому моего вложения:

class Document

  has_attached_file :revision

  def revision_contents
    revision.copy_to_local_file.read
  end

end

Обратите внимание, что я опустил параметры конфигурации paperclip и любые виды обработки ошибок.

Ответ 2

В Paperclip 3.0.1 вы можете просто использовать io_adapter, который не требует записи (и удаления) локальной файловой системы.

Paperclip.io_adapters.for(attachment.file).read

Ответ 4

@jon-m answer необходимо обновить, чтобы отразить последние изменения в paperclip, для того чтобы это работа изменилось на что-то вроде:

class Document

  has_attached_file :revision

  def revision_contents(path = 'tmp/tmp.any')
    revision.copy_to_local_file :original, path
    File.open(path).read
  end
end

Немного запутанный, поскольку @jwadsack, упомянутый с использованием метода Paperclip.io_adapters.for, выполняет то же самое и кажется лучшим и более чистым способом сделать это IMHO.

Ответ 5

Вам нужно будет загрузить содержимое файла (используя Rubys File.open) в переменную, прежде чем вы ее покажете. Это может быть дорогостоящей операцией, если ваше приложение получает много пользы, поэтому может быть полезно прочитать содержимое файла и поместить его в текстовый столбец в своей базе данных после его загрузки.

Ответ 6

Вложение уже наследуется от IOStream. http://rdoc.info/github/thoughtbot/paperclip/master/Paperclip/Attachment

Значит, это должно быть только "#{attachment}" или <% RDiscount.new(attachment).to_html %> или send_data(attachment). Однако вы хотели отобразить данные.