Как вы получаете доступ к необработанному содержимому файла, загруженного с помощью программы "Скрепка/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 посвящены изображениям, а не текстовым файлам.
Ответы
Ответ 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
Ответ 3
Для доступа к файлу вы можете использовать метод пути:
csv_file.path
http://rdoc.info/gems/paperclip/Paperclip/Attachment#path-instance_method
Это может использоваться вместе с, например, считывателем CSV.
Ответ 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)
. Однако вы хотели отобразить данные.