回形针更改URL /路径

时间:2014-04-02 16:12:50

标签: ruby-on-rails-4

我正在使用Rails 4 Ruby 2.1.1

我需要更改my:url,:path,:default以便我可以访问controllers目录中的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"

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

1 个答案:

答案 0 :(得分:29)

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.

让我们采取一步一步的方法:

您的第一个要求如下:

  

我需要更改my: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 目录下。路径 /原始的最后一部分归因于/:style选项中指定的:path。由于您没有为附件指定任何:styles选项,因此只会创建默认样式,即original。 请注意 控制器文件夹位于应用程序根级别,该文件夹是不可公开访问的文件夹。

只能通过网络浏览器访问在公共文件夹(及其后代)下上传的文件。如果您不打算在视图中的任何位置显示上传的文件和/或只是需要它进行某些后台处理,那么,您当前的配置不需要任何更改。它会很好地工作。

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

但是如果您计划在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路径中。否则,点击链接后会出现错误。