1

Carrierwaveを使用してRailsアプリケーションにPDFをアップロードしています。私の目的は、PDFの各ページをPNGに変換し、これらの各PNGが私のモデルなどに基づいてCarrierwaveが作成するアップロードディレクトリに存在することを確認することです。

現在の進捗状況は、PDFをアップロードし、Carrierwaveが作成する一時ディレクトリで一連のPNGに変換することはできますが、これらの変換されたPNGを指定されたアップロードディレクトリに移動する正しいアプローチを見つけることができません。

"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"

更新-私の現在の試みとエラーコードの下に追加

私の現在のコードは次のとおりです。

def extract(format)
  cache_stored_file! if !cached?
  images = Magick::ImageList.new(current_path)
  images.write File.dirname( current_path ) << "/" << filename
end

def filename
  super != nil ? super.split('.').first + '.png' : super
end

アップロードディレクトリへのアプローチを使用してファイルを移動しようとすると、「そのようなファイルまたはディレクトリはありません」というエラーが発生します。たとえば、次を使用します。

images.each do |f|
  FileUtils.mv f.filename, File.join("#{Rails.root}/#{store_dir}", "image-0.png")
end

Errno::ENOENT (No such file or directory - 
(/Users/reggie/ExampleApp/public/uploads/tmp/20120611-2259-7520-3647/image-0.png,
 /Users/reggie/ExampleApp/public/uploads/painting/image/39/image-0.png))

私がぶつかったこの壁を乗り越えるのを助けるためにどんな提案も歓迎されるでしょう。

操作ロジックを使用しない理由に関する補足として、サンプルコード(以下を参照)は上記と同じ結果になります。つまり、Carrierwaveによって作成された一時ディレクトリに変換されたファイルがありますが、変換されたすべての画像は.pdfファイルのままです。拡大。

manipulate!(:format => :png) do |img|
  img
end
4

2 に答える 2

1

さて、あなたの主な問題はあなたの保存フォルダが存在しないということです。

Carrierwaveパスの構築は、「public」フォルダーを基準にしています。

アップローダーでは次のようなものを使用する必要があります。

process :generate_png

protected
def generate_png
    manipulate! do |image, index|
        image.format = 'png'
        image.write("#{Rails.root}/public/#{store_dir}/image-#{index}.png")
        ...
    end
end

これらのファイルを削除するには、コールバックを使用します。

before :remove, :clear_uploader 

protected
def clear_uploader
   ...
end
于 2013-02-03T03:10:53.753 に答える
0

ファイルの名前変更を適切にスコープすると、ファイルの名前を正しく変更するための操作を取得できる場合があります。

これは、SVGをアップロードするために機能していますが、サムネイルの名前のみをPNGに変更しています。サムネイル生成ブロック内で名前変更関数がどのようにスコープされているかに注目してください

  version :thumb do
    def full_filename(for_file)
      super(for_file).chomp(File.extname(super(for_file))) + '.png'
    end
    process :convert => 'png'
    process resize_to_fit: [50, 50]
  end

あなたはあなたのマニウプレートを手に入れることができるかもしれません!full_filename関数に同様のdefを入力した場合、正しいファイルサフィックスを使用できます。

于 2018-07-27T18:16:27.173 に答える