すでにサーバー上にあるファイルでpaperclipを使用する方法は?
-
05-07-2019 - |
質問
記録のために、私はレガシーコードに取り組んでおり、すべてを壊すことなく新しい機能をプラグインしようとしています。現在、サーバー上には次のようなファイルがたくさんあります:
myapp/public/temp/myfile.doc
問題は、コントローラーアクションでこれらのファイルからDocfileオブジェクトを作成することです。
トリミングされたDocfileクラスは次のとおりです。
class DocFile < ActiveRecord::Base
has_attached_file :docs,
:path => "#{Constants::DOCFILES_PATH}:basename.:extension",
:url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end
Paperclipには、フォームからアップロードする場合の素晴らしいドキュメントがありますが、私の状況ではありません。
では、どうすれば「シミュレート」できますか?ファイルをアップロードしているという事実ですか?
これまでにこれを試しました:
temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file
しかし、機能していません。
任意のポインターをいただければ幸いです!
編集:
これをやった:
temp_file_url = Constants::TEMPORARY_UPLOAD_PATH + "/" + params[:temp_file_upload][:doc]
temp_file = File.new(temp_file_url, "w+")
@docfile = DocFile.new :docs => File.open(temp_file_url)
まだ動作していません
解決
これをしなければなりませんでした:
temp_file_name = #the filename
temp_file_path = Constants::TEMPORARY_UPLOAD_PATH + "/" + temp_file_name
temp_file = File.new(temp_file_path, "r")
@docfile = DocFile.new :docs => temp_file
&quot; read&quot;としてファイルを開かなかった場合動作しません。私にはほとんど意味がありませんが、今はうまくいきます!
他のヒント
私はRailsの権威ではありませんが、
@docfile = DocFile.new :docs => temp_file
すべきではない
@docfile = DocFile.new :docs => temp_file_url
Paperclip
に File
オブジェクトを渡す必要があります:
temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)
移行でこれに対処する必要があり、既存のファイルの場合、paperclipがモデルに追加する列( xxx_file_name
、 xxx_content_type、xxx_file_size コード>)。
Constants :: DOCFILES_PATH
がレガシードキュメントディレクトリにマップされているかどうかは言及しませんでしたが、そうであっても、paperclipが期待するディレクトリ構造にこれらのファイルにシンボリックリンクする必要があると思います。
所属していません StackOverflow