gpt4 book ai didi

ruby-on-rails - Rails 回形针 gem - 从私有(private)文件夹中获取文件

转载 作者:行者123 更新时间:2023-12-04 07:37:27 25 4
gpt4 key购买 nike

我正在使用回形针将文件上传到我的服务器。如果我不指定路径,paperclip会将文件保存到公共(public)文件夹,然后我可以通过访问<%= @user.file.url %>来下载它。在 View 中。但是,如果我指定非公共(public)文件夹的路径,显然不可能从 View 中获取文件。

我想知道从 Web 和 ruby​​ 脚本下载私有(private)文件夹中保存的文件的方法。

最佳答案

我们需要做的第一件事是将路由添加到 routes.rb 以访问文件。

编辑 routes.rb 并添加粗体的 :member 参数:

resources :users, :member => { :avatars => :get }

现在要获取用户 7 的头像,例如,我们可以发出这样的 URL:

 localhost:3000/users/7/avatars

… 并且请求将被路由到 users Controller 中的 avatars 操作(复数,因为用户可能有不止一种风格的头像)。

那么现在让我们继续实现化身方法并添加一些代码以将文件下载到客户端。这样做的方法是使用 ActionController::Streaming::send_file .这很简单;我们只需要将文件的路径传递给 send_file 以及客户端使用的 MIME 内容类型作为决定如何显示文件的线索,就是这样!让我们对这些值进行硬编码以便更好地理解(在此处为您的机器更新路径):

    class UsersController < ApplicationController
def avatars
send_file '/path/to/non-public/system/avatars/7/original/mickey-mouse.jpg',
:type => 'image/jpeg'
end
end

现在,如果您在浏览器中输入 localhost:3000/users/7/avatars,您应该会看到米奇图像。

我们显然需要能够处理对任何用户记录的任何头像文件附件的请求,而不是在化身方法中对路径进行硬编码。为此,配置 Paperclip 并告诉它文件现在存储在文件系统中的什么位置,以及我们配置 routes.rb 文件要使用的 URL。

为此,我们需要在用户模型 (user.rb) 中对 has_attached_file 的调用添加几个参数,

    has_attached_file :avatar,
:styles => { :thumb => "75x75>", :small => "150x150>" },
:path =>
':rails_root/non-public/system/:attachment/:id/:style/:basename.:extension',
:url => '/:class/:id/:attachment'

但是现在我们可以在 UserController 中概括我们的代码来处理任何用户,就像这样:

    def avatars
user = User.find(params[:id])
send_file user.avatar.path, :type => user.avatar_content_type
end

现在我们可以再次测试 localhost:3000/users/7/avatars 以确保我们没有破坏任何东西。

干杯!

关于ruby-on-rails - Rails 回形针 gem - 从私有(private)文件夹中获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com