【问题标题】:Paperclip changing URL/Path回形针更改 URL/路径
【发布时间】:2014-04-03 08:28:48
【问题描述】:

我正在使用 Rails 4 Ruby 2.1.1

我需要更改我的 :url、:path、:default 以便我可以访问控制器目录中的 example-data.csv 文件。目前它将我的 example_data.csv 文件存储在public/origin/example_data.csv 中。 但我希望我的 example_data.csv 文件保存在 /controllers/original 目录中。

这是我目前所拥有的。

has_attached_file :

csvdata, :url => "/controllers/original/:style/:basename.:extension",
         :path => ":rails_root/controllers/original/:style/:basename.:extension",
         :default_url => "/controllers/original/example_data.csv"

当我运行代码时,它不会将我的代码放在控制器目录中。

【问题讨论】:

    标签: ruby-on-rails-4


    【解决方案1】:

    Paperclip 允许您在首选位置上传文件。您可以根据需要修改其选项,例如:url:path:default_url

    在我们进一步讨论之前,让我稍微了解一下这些选项的用途:

    :url         - The full URL of where the attachment is publicly accessible. 
    
    :path        - The files that are assigned as attachments are, by default, placed in the directory specified by this option.
    
    :default_url - The URL that will be returned if there is no attachment assigned.
    
    :styles      - A hash of thumbnail styles with geometries. If you need copies of uploaded files with particular dimensions then specify them here.
    

    让我们一步一步来:

    您的第一个要求如下:

    我需要更改我的 :url、:path、:default_url 以便可以访问控制器目录中的 example-data.csv 文件。

    是的,有可能。您当前的配置如下所示,无需任何更改即可正常工作。

    has_attached_file :csvdata, 
             :url => "/controllers/original/:style/:basename.:extension",
             :path => ":rails_root/controllers/original/:style/:basename.:extension",
             :default_url => "/controllers/original/example_data.csv"
    

    但是这里有一些我想强调的问题。通过上述设置,每当您上传文件时,它都会存储在 application_folder/controllers/original/original 目录下。路径 /original 的最后一部分是由于在 :path 选项中指定的 /:style。由于您没有为附件指定任何:styles 选项,因此只会创建默认样式,即original。 请注意controllers 文件夹位于应用程序根级别,这是一个不可公开访问 文件夹。

    只有在 public 文件夹(及其后代)下上传的文件可以通过网络浏览器访问。如果您不打算在视图中的任何位置显示上传的文件和/或只需要它进行一些后台处理,那么您当前的配置不需要任何更改。它将按原样正常工作。

    如果这是您打算实现的目标,则无需采取进一步行动。

    但是如果您打算在 Web 应用程序中显示或访问上传的文件,则需要将其放在可通过浏览器访问的 public 文件夹中。在这种情况下,您的代码需要进行一些更改。

    ## Update current configuration as below 
    has_attached_file :csvdata, 
             :url => "/controllers/:style/:basename.:extension",
             :path => ":rails_root/public/controllers/:style/:basename.:extension",
             :default_url => "/controllers/:style/example_data.csv"
    

    注意:我从路径中删除了/original,因为:style 将创建original 文件夹。 否则,文件夹将是/controllers/original/original/..

    通过上述设置,每当您上传文件时,它都会存储在 application_folder/public/controllers/original 目录下。您可以在视图中通过简单的调用(如@model_instance.csvdata.url)轻松访问上传的文件。例如,根据您的问题,您正在上传一个名为 example_data.csv 的文件,然后在您的视图中您可以将其用作:

      ## Replace @model_instance with Model instance (contains `csvdata` attachment)  
      <%= link_to "Example Data", @model_instance.csvdata.url %> 
    

    这将生成一个指向已上传文件的可点击链接:

      <a href="/controllers/original/example_data.csv?12345678">Example Data</a>
    

    注意:?12345678 是由 rails 附加的随机种子。


    关于 :default_url

     :default_url => "/controllers/:style/example_data.csv"
    

    在配置中指定:default_url 选项始终是一个好习惯。这样做的原因是,如果用户在创建记录时没有上传文件,但后来尝试访问此记录的uploaded file,那么他们将被定向到default_url 中设置的链接。另请注意,对于此特定记录,所有attachment 相关列都将设置为nil

    另外,我很困惑当你想在应用程序中上传相同的文件时,为什么要让 default_url 指向example_data.csv。标准方法是使用名为missing.csvmissing.png 的默认文件,该文件与您上传的文件无关。请记住将missing.csvmissing.png 放在/controllers/original/ 文件夹内,即:default_url 路径。否则,点击链接时会报错。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多