Class: Rack::Uploads
- Inherits:
-
Object
show all
- Defined in:
- lib/rack/uploads/middleware.rb,
lib/rack/uploads/uploaded_file.rb
Defined Under Namespace
Classes: UploadedFile, UploadedNginxFile
Instance Method Summary
collapse
Constructor Details
#initialize(app, options = {}) ⇒ Uploads
Returns a new instance of Uploads.
4
5
6
7
8
|
# File 'lib/rack/uploads/middleware.rb', line 4
def initialize(app, options={})
@app = app
@session_authorized = options[:session_authorized] || true
@nginx = options[:nginx] || [{ :tmp_path => "_tmp_path", :filename => "_file_name" }]
end
|
Instance Method Details
#call(env) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/rack/uploads/middleware.rb', line 22
def call(env)
req = Rack::Request.new(env)
if req.post? && req.form_data?
return not_authorized unless @session_authorized == true || (@session_authorized.respond_to?(:call) && @session_authorized.call(req) == true)
uploads = (req, req.params)
env['rack.uploads'] = uploads if uploads.size > 0
end
resp = @app.call(env)
if uploads && uploads.size > 0
uploads.each { |upload| upload.cleanup }
end
resp
end
|
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/rack/uploads/middleware.rb', line 10
def (req, params, uploads=[])
params.each do |key,param|
if param_file = file(req, key, param)
uploads << param_file
params[key] = param_file
elsif param.instance_of?(Hash)
uploads = (req, param, uploads)
end
end
uploads
end
|
#file(req, key, param) ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/rack/uploads/middleware.rb', line 40
def file(req, key, param)
return UploadedFile.new(key, param) if param.instance_of?(Hash) && param[:tempfile]
@nginx.each do |nginx|
if key =~ %r{^(.+)#{nginx[:tmp_path]}$}
tmp_path = param
filename = req.params["#{$1}#{nginx[:filename]}"]
return UploadedNginxFile.new($1, {:filename => filename, :temp_path => tmp_path}) if ::File.exist?(tmp_path) && filename
end
end
nil
end
|
#invalid_request ⇒ Object
52
53
54
|
# File 'lib/rack/uploads/middleware.rb', line 52
def invalid_request
[400, {}, 'Invalid Request']
end
|
#multipart?(req) ⇒ Boolean
36
37
38
|
# File 'lib/rack/uploads/middleware.rb', line 36
def multipart?(req)
req.media_type == "multipart/form-data"
end
|
#not_authorized ⇒ Object
56
57
58
|
# File 'lib/rack/uploads/middleware.rb', line 56
def not_authorized
[403, {}, 'Not Authorized']
end
|