如何使用Ruby on Rails中的Paperclip进行文件上传处理?

2026-04-28 02:151阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计470个文字,预计阅读时间需要2分钟。

如何使用Ruby on Rails中的Paperclip进行文件上传处理?

我需要上传一个PDF文件,并创建(作为独立文件)一个缩略图图像,包含PDF的前3页。我计划使用RMagick制作一个Paperclip处理器来生成该文件,但问题是:我希望单独的文件(包含缩略图样式的文件)具备以下特点。

我想上传pdf文件,并创建(作为单独的文件)缩略图图像,其中PDF的前3页水平对齐.
我设法用RMagick做一个Paperclip处理器来生成该文件,但问题是:我希望单独的文件(带有缩略图样式的文件)具有正确的扩展名(例如jpg)而不是原始的pdf.
如果我仍然可以通过使用带样式的url方法获得正确的路径,那将是很好的,例如:

如何使用Ruby on Rails中的Paperclip进行文件上传处理?

>> attachment.url => "/some/path/id/original/test.pdf" # original file >> attachment.url(:pdf_thumbnail) => "/some/path/id/pdf_thumbnail/test.jpg" # jpg file, not pdf

一些代码:

处理器

module Paperclip class PdfThumbnail < Processor def initialize(file, options = {}, attachment = nil) super @file = file @instance = options[:instance] @current_format = File.extname(@file.path) @basename = File.basename(@file.path, @current_format) end def make dst = Tempfile.new([@basename, 'jpg'].compact.join(".")) dst.binmode pdf = ::Magick::ImageList.new(File.expand_path(@file.path)) image = pdf[0..2].append(false) image.format = 'JPG' image.write(File.expand_path(dst.path)) dst.flush return dst end end end

型号(提取)

has_attached_file :file, :styles => {:pdf_thumbnail => ""}, :processors => [:pdf_thumbnail]

它结束于:

$tree . . `-- 46 |-- original | `-- test.pdf `-- pdf_thumbnail `-- test.pdf

和:

$file 46/original/test.pdf 46/original/test.pdf: PDF document, version 1.4 $file 46/pdf_thumbnail/test.pdf 46/pdf_thumbnail/test.pdf: JPEG image data, JFIF standard 1.01

所以文件很好,但我想要pdf_thumbnail样式的不同扩展名.

有帮助吗?或者也许是另一种方式/清洁代码?

我没试过这个,但怎么样:

has_attached_file :file, :styles => { :pdf_thumbnail => ["", :jpg] } ...

根据Paperclip文档,数组中的第二项应该强制格式化,尽管它没有指定它是否也适用于自定义处理器.但值得一试.

本文共计470个文字,预计阅读时间需要2分钟。

如何使用Ruby on Rails中的Paperclip进行文件上传处理?

我需要上传一个PDF文件,并创建(作为独立文件)一个缩略图图像,包含PDF的前3页。我计划使用RMagick制作一个Paperclip处理器来生成该文件,但问题是:我希望单独的文件(包含缩略图样式的文件)具备以下特点。

我想上传pdf文件,并创建(作为单独的文件)缩略图图像,其中PDF的前3页水平对齐.
我设法用RMagick做一个Paperclip处理器来生成该文件,但问题是:我希望单独的文件(带有缩略图样式的文件)具有正确的扩展名(例如jpg)而不是原始的pdf.
如果我仍然可以通过使用带样式的url方法获得正确的路径,那将是很好的,例如:

如何使用Ruby on Rails中的Paperclip进行文件上传处理?

>> attachment.url => "/some/path/id/original/test.pdf" # original file >> attachment.url(:pdf_thumbnail) => "/some/path/id/pdf_thumbnail/test.jpg" # jpg file, not pdf

一些代码:

处理器

module Paperclip class PdfThumbnail < Processor def initialize(file, options = {}, attachment = nil) super @file = file @instance = options[:instance] @current_format = File.extname(@file.path) @basename = File.basename(@file.path, @current_format) end def make dst = Tempfile.new([@basename, 'jpg'].compact.join(".")) dst.binmode pdf = ::Magick::ImageList.new(File.expand_path(@file.path)) image = pdf[0..2].append(false) image.format = 'JPG' image.write(File.expand_path(dst.path)) dst.flush return dst end end end

型号(提取)

has_attached_file :file, :styles => {:pdf_thumbnail => ""}, :processors => [:pdf_thumbnail]

它结束于:

$tree . . `-- 46 |-- original | `-- test.pdf `-- pdf_thumbnail `-- test.pdf

和:

$file 46/original/test.pdf 46/original/test.pdf: PDF document, version 1.4 $file 46/pdf_thumbnail/test.pdf 46/pdf_thumbnail/test.pdf: JPEG image data, JFIF standard 1.01

所以文件很好,但我想要pdf_thumbnail样式的不同扩展名.

有帮助吗?或者也许是另一种方式/清洁代码?

我没试过这个,但怎么样:

has_attached_file :file, :styles => { :pdf_thumbnail => ["", :jpg] } ...

根据Paperclip文档,数组中的第二项应该强制格式化,尽管它没有指定它是否也适用于自定义处理器.但值得一试.