3

ユーザーが 3 つのファイル (A.ttf、A.svg、A.otf) を含む zip ファイルをアップロードし、元の zip と 3 つのフォント ファイルをその中に保存したいと考えています。このコードで3つのバージョンを作成しました

version :ttf
    process :font => :ttf
end

version :svg
    process :font => :svg
end

version :otf
    process :font => :otf
end

元のファイルの 4 つのコピーが正常に保存され、すべてが適切なファイル名で保存されます。ただし、個々のファイルを CarrierWave に保存する方法がわかりません。このコードは機能しません。:(

def font(format)
  new_file = nil

  # Loop through the zip file and extract the files
  Zip::ZipFile.open(@file.file) do |files|
    files.each do |f|
      next unless f.file?

      filename  = f.name.split("/").last
      ext       = filename.split('.').last

      # Save the file with the proper file extension
      new_file = f if ext == format
  end

  # Return the file to be stored by CarrierWave
  new_file
end
4

2 に答える 2

5

OK、何時間も頭を壁にぶつけた後、ついにライトが点灯しました。解決策は、CarrierWave がアップロードを処理する方法にあります。バージョンを定義すると、CW はファイルを新しい名前 ([バージョン名]_original_filename) で複製し、 current_path変数に指定します。このファイル参照を使用して、必要なことは何でも行うことができます (つまり、ファイルを開いて切り詰めたり、ランダムな日付を入力したりするなど)。完了すると、CW がファイルを保存します。

どういうわけか私は接続を逃し、何が起こっているのかを理解したとき、ほとんど目がくらみました。私はここでこの質問に答えているので、暗闇の中で失われた他の貧しい魂を助けるかもしれません. そして、私の無知を世界に示すために。:/

于 2011-02-11T15:50:24.260 に答える
0

CarrierWaveについては知りません。しかし、あなたはzipファイルオブジェクトを返しています。それはあなたが渡したいものですか、それともファイルの名前を渡したいですか? または、ファイルを抽出して、抽出したファイル パスを返しますか?

于 2011-02-11T11:40:48.990 に答える