我正在制作一个简单的机架应用程序,在验证后授予对安全文件的访问权限.
由于文件中的数据是敏感的,因此它们位于应用程序的非公共文件夹中.
现在,在检查会话数据之后,我只是打开文件进行读取,并将内容作为响应的主体发送.
它感觉很丑,对于较大的文件来说必须非常耗费资源.
响应示例:
[ "200", {"Content-Type"=> MIME::Types.type_for(file).first.to_s }, File.open( file ).read() ]
Run Code Online (Sandbox Code Playgroud)
我查看了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
Run Code Online (Sandbox Code Playgroud)
用法:
[ "200", {"Content-Type"=> MIME::Types.type_for(file).first.to_s }, FileStreamer.new(file) ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |