gpt4 book ai didi

ruby - 从 Rack 应用程序提供非公共(public)二进制文件

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:05 25 4
gpt4 key购买 nike

我正在制作一个简单的 Rack 应用程序,在身份验证后授予对 protected 文件的访问权限。
由于文件中的数据是敏感的,因此它们位于应用程序的非公共(public)文件夹中。

目前,在检查 session 数据后,我只是打开文件进行读取并将内容作为响应的主体发送。
感觉很难看,而且对于较大的文件来说肯定非常耗费资源。

示例响应:

[ "200", {"Content-Type"=> MIME::Types.type_for(file).first.to_s }, File.open( file ).read() ]

我调查了 Rack::Sendfile ,但据我了解,它是一个中间件,不能从应用程序本身内部发送文件。

从 Rack 应用程序发送非公开二进制文件的最有效方法是什么?

最佳答案

Rack 响应主体必须响应 #each{|d|}。所以你可以像这样流式传输响应:

class FileStreamer
def initialize(path)
@file = File.open(path)
end

def each(&blk)
@file.each(&blk)
ensure
@file.close
end
end

用法:

[ "200", {"Content-Type"=> MIME::Types.type_for(file).first.to_s }, FileStreamer.new(file) ]

关于ruby - 从 Rack 应用程序提供非公共(public)二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13152968/

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