代码之家  ›  专栏  ›  技术社区  ›  marcgg

如何将回形针与服务器上已有的文件一起使用?

  •  2
  • marcgg  · 技术社区  · 15 年前

    作为记录,我正在处理遗留代码,并且我正在尝试在不破坏一切的情况下插入一个新特性。现在我的服务器上有很多文件,比如:

     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
    

    如果你从表格上传的话,回形针有一些不错的文档,但在我的情况下没有。

    那么我如何才能“模拟”我上传文件的事实呢?

    到目前为止,我已经尝试过:

    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)
    

    它仍然不工作

    4 回复  |  直到 15 年前
        1
  •  3
  •   marcgg    15 年前

    我必须这样做:

    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
    

    显然,如果我不以“读”的方式打开文件,它就不会工作。这对我来说没什么意义,但现在它起作用了!

        2
  •  1
  •   Anand Shah    15 年前

    我不是铁路上的权威,但是,

    @docfile = DocFile.new :docs => temp_file
    

    不应该是

    @docfile = DocFile.new :docs => temp_file_url  
    
        3
  •  1
  •   mtyaka    15 年前

    你应该通过 Paperclip File 对象:

    temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
    @docfile = DocFile.new :docs => File.open(temp_file_path)
    
        4
  •  0
  •   Jeff Paquette    15 年前

    我认为您需要通过迁移来解决这个问题,对于您现有的文件,您需要填充曲别针添加到模型中的列。( xxx_file_name , xxx_content_type, xxx_file_size )。你没有提到如果 Constants::DOCFILES_PATH 是映射到您的旧文档目录,但即使如此,我认为您必须将这些文件符号链接到Paperclip期望的目录结构。

    推荐文章