Module: Rack::Multipart
- Defined in:
- lib/rack/multipart.rb,
lib/rack/multipart/parser.rb,
lib/rack/multipart/generator.rb,
lib/rack/multipart/uploaded_file.rb
Overview
A multipart form data parser, adapted from IOWA.
Usually, Rack::Request#POST takes care of calling this.
Defined Under Namespace
Classes: Generator, MultipartPartLimitError, MultipartTotalPartLimitError, Parser, UploadedFile
Constant Summary collapse
- EOL =
"\r\n"
- MULTIPART_BOUNDARY =
"AaB03x"
- MULTIPART =
%r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
- TOKEN =
/[^\s()<>,;:\\"\/\[\]?=]+/
- CONDISP =
/Content-Disposition:\s*#{TOKEN}\s*/i
- VALUE =
/"(?:\\"|[^"])*"|#{TOKEN}/
- BROKEN =
/^#{CONDISP}.*;\s*filename=(#{VALUE})/i
- MULTIPART_CONTENT_TYPE =
/Content-Type: (.*)#{EOL}/ni
- MULTIPART_CONTENT_DISPOSITION =
/Content-Disposition:[^:]*;\s*name=(#{VALUE})/ni
- MULTIPART_CONTENT_ID =
/Content-ID:\s*([^#{EOL}]*)/ni
- ATTRIBUTE_CHAR =
Updated definitions from RFC 2231
%r{[^ \x00-\x1f\x7f)(><@,;:\\"/\[\]?='*%]}
- ATTRIBUTE =
/#{ATTRIBUTE_CHAR}+/
- SECTION =
/\*[0-9]+/
- REGULAR_PARAMETER_NAME =
/#{ATTRIBUTE}#{SECTION}?/
- REGULAR_PARAMETER =
/(#{REGULAR_PARAMETER_NAME})=(#{VALUE})/
- EXTENDED_OTHER_NAME =
/#{ATTRIBUTE}\*[1-9][0-9]*\*/
- EXTENDED_OTHER_VALUE =
/%[0-9a-fA-F]{2}|#{ATTRIBUTE_CHAR}/
- EXTENDED_OTHER_PARAMETER =
/(#{EXTENDED_OTHER_NAME})=(#{EXTENDED_OTHER_VALUE}*)/
- EXTENDED_INITIAL_NAME =
/#{ATTRIBUTE}(?:\*0)?\*/
- EXTENDED_INITIAL_VALUE =
/[a-zA-Z0-9\-]*'[a-zA-Z0-9\-]*'#{EXTENDED_OTHER_VALUE}*/
- EXTENDED_INITIAL_PARAMETER =
/(#{EXTENDED_INITIAL_NAME})=(#{EXTENDED_INITIAL_VALUE})/
- EXTENDED_PARAMETER =
/#{EXTENDED_INITIAL_PARAMETER}|#{EXTENDED_OTHER_PARAMETER}/
- DISPPARM =
/;\s*(?:#{REGULAR_PARAMETER}|#{EXTENDED_PARAMETER})\s*/
- RFC2183 =
/^#{CONDISP}(#{DISPPARM})+$/i
Class Method Summary collapse
- .build_multipart(params, first = true) ⇒ Object
- .extract_multipart(req, params = Rack::Utils.default_query_parser) ⇒ Object
- .parse_multipart(env, params = Rack::Utils.default_query_parser) ⇒ Object
Class Method Details
.build_multipart(params, first = true) ⇒ Object
58 59 60 |
# File 'lib/rack/multipart.rb', line 58 def build_multipart(params, first = true) Generator.new(params, first).dump end |
.extract_multipart(req, params = Rack::Utils.default_query_parser) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/rack/multipart.rb', line 44 def extract_multipart(req, params = Rack::Utils.default_query_parser) io = req.get_header(RACK_INPUT) io.rewind content_length = req.content_length content_length = content_length.to_i if content_length tempfile = req.get_header(RACK_MULTIPART_TEMPFILE_FACTORY) || Parser::TEMPFILE_FACTORY bufsize = req.get_header(RACK_MULTIPART_BUFFER_SIZE) || Parser::BUFSIZE info = Parser.parse io, content_length, req.get_header('CONTENT_TYPE'), tempfile, bufsize, params req.set_header(RACK_TEMPFILES, info.tmp_files) info.params end |