| Class | Rack::File |
| In: |
lib/rack/file.rb
|
| Parent: | Object |
Rack::File serves files below the root given, according to the path info of the Rack request.
Handlers can detect if bodies are a Rack::File, and use mechanisms like sendfile on the path.
| F | = | ::File |
| path | [RW] | |
| root | [RW] |
# File lib/rack/file.rb, line 22
22: def _call(env)
23: if env["PATH_INFO"].include? ".."
24: return [403, {"Content-Type" => "text/plain"}, ["Forbidden\n"]]
25: end
26:
27: @path = F.join(@root, Utils.unescape(env["PATH_INFO"]))
28: ext = F.extname(@path)[1..-1]
29:
30: if F.file?(@path) && F.readable?(@path)
31: [200, {
32: "Last-Modified" => F.mtime(@path).rfc822,
33: "Content-Type" => MIME_TYPES[ext] || "text/plain",
34: "Content-Length" => F.size(@path).to_s
35: }, self]
36: else
37: return [404, {"Content-Type" => "text/plain"},
38: ["File not found: #{env["PATH_INFO"]}\n"]]
39: end
40: end