gpt4 book ai didi

ruby-on-rails - 通过自定义 Controller 操作将 ActiveStorage 文件发送给用户

转载 作者:行者123 更新时间:2023-12-04 22:39:57 24 4
gpt4 key购买 nike

我知道 ActiveStorage url_for(user.avatar)方法。例子:

<%= link_to "Download this file", url_for(@user.avatar) %>

这很好,但它似乎没有围绕它建立授权。任何知道此链接的人都可以下载此文档。

过去当我使用 paperclip ,我有一个指向自定义 Controller 操作的链接。那个自定义 Controller Action 做了授权,如果一切顺利,那么我使用了 send_file将文件发送给用户。它是这样的:
def deliver_the_file
authorize :my_authorization
send_file @user.avatar.path
end

我怎样才能用 active_storage 做到这一点?我开始工作的只有 url_for根本不授权用户的实现。

我正在专门查看 Download Files ActiveStorage 上的 Rails 指南的一部分。

相关示例代码:
# model 
class Book < ApplicationRecord
has_one_attached :book_cover
end


class BooksController < ApplicationController
...

# custom action to authorize and then deliver the active_storage file
def deliver_it
# ... assume authorization already happened
send_file rails_blob_path(@book.book_cover, disposition: "attachment")
end
end

这个错误并说:

Cannot read file



我也尝试过这个:
def deliver_it
# ... assume authorization already happened
send_file @book.book_cover.download
end

这返回了错误:

string contains null byte



我也尝试过这个:
def deliver_it
@book.book_cover.download
end

这返回了错误:

BooksController#deliver_it is missing a template for this request



我也试过这个:
def deliver_it
send_file @book.book_cover.blob
end

这个错误并说:

no implicit conversion of ActiveStorage::Blob into String

最佳答案

我从 this ActiveStorage issue 的评论中得出了这个解决方案

def deliver_it
send_data @book.book_cover.download, filename: @book.book_cover.filename.to_s, content_type: @book.book_cover.content_type
end

关于ruby-on-rails - 通过自定义 Controller 操作将 ActiveStorage 文件发送给用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50282707/

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