如何将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
显然,如果我没有将文件打开为“read”,它不会起作用。这对我来说没什么意义,但它现在有效!
其他提示
我不是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