回形针更改URL /路径

use*_*016 7 ruby-on-rails-4

我正在使用Rails 4 Ruby 2.1.1

我需要更改我的: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"
Run Code Online (Sandbox Code Playgroud)

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

Kir*_*rat 30

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.
Run Code Online (Sandbox Code Playgroud)

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

您的第一个要求如下:

我需要更改我的:url,:path,:default_url所以我可以访问controllers目录中的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"
Run Code Online (Sandbox Code Playgroud)

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

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

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

但是,如果您计划在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"
Run Code Online (Sandbox Code Playgroud)

注意:/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 %> 
Run Code Online (Sandbox Code Playgroud)

这将生成上传文件的可点击链接:

  <a href="/controllers/original/example_data.csv?12345678">Example Data</a>
Run Code Online (Sandbox Code Playgroud)

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


关于:default_url

 :default_url => "/controllers/:style/example_data.csv"
Run Code Online (Sandbox Code Playgroud)

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

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