Brother, it's called multipart!
The beautiful Life of the Sun Vulcan (http://blog.csdn.net/opengl_es)
This article follows "Attribution-non-commercial use-consistent" authoring public agreement
Reprint Please keep this sentence: Sun Vulcan's Beautiful Life-this blog focuses on Agile development and mobile and IoT device research: IOS, Android, HTML5, Arduino, Pcduino , Otherwise, the article from this blog refused to reprint or re-reproduced, thank you for your cooperation.
What would you do if I only told you that I used the HTTP protocol to upload files?
There may be many ways, but at least we need to know that the GET method of the HTTP protocol is not reliable, too short;
Then POST is undoubtedly a good choice for Http methods, because it can be an infinitely long body of content.
As for the content of the file is BASE64 encoded into the package body, or use multipart/form-data upload, this look you like.
The following is an excerpt from the HTML401 protocol, which you can refer to rfc1341 for a more detailed description.
17.13.4Form Content Types
The enctype attribute of the FORM element specifies the content type used to encode the form data set for submission to the Server. User agents must support the content types listed below. Behavior for other content types is unspecified.
Please also consult the sections on escaping ampersands in URI attribute values.
application/x-www-form-urlencoded
This is the default content type. Forms submitted with this content type must is encoded as follows:
- Control names and values are escaped. Space characters is replaced by `+‘ , and then reserved characters is escaped as described in [RFC1738], section 2.2:n On-alphanumeric characters `%HH‘ is replaced by, a percent sign and both hexadecimal digits representing the ASCII code of The character. Line breaks is represented as "CR LF" pairs (i.e., `%0D%0A‘ ).
- The control names/values is listed in the order they appear in the document. The name is separated from the value by and name/value pairs is separated from each other by `=‘ `&‘ .
Multipart/form-data
Note. Consult [RFC2388] For additional information about file uploads, including backwards compatibility issues, the RelA Tionship between "Multipart/form-data" and other content types, performance issues, etc.
Please consult the appendix for information on security issues for forms.
The content type "application/x-www-form-urlencoded" is inefficient for sending large quantities of binary data or text co Ntaining non-ascii characters. The content type "Multipart/form-data" should is used for submitting forms that contain files, non-ascii data, and binary Data.
The content "Multipart/form-data" follows the rules of all multipart MIME data streams as outlined in [RFC2045]. The definition of "Multipart/form-data" is available at the [IANA] registry.
A "multipart/form-data" message contains a series of parts, each representing a successful control. The parts is sent to the processing agent in the same order the corresponding controls appear in the document stream. Part boundaries should not occur in any of the data; How this is done lies outside the scope of this specification.
As with any multipart MIME types, each of the have an optional "Content-type" header, the defaults to "Text/plain". User agents should supply the "Content-type" header, accompanied by a "charset" parameter.
Each of the expected to contain:
- A "content-disposition" header whose value is "Form-data".
- A name attribute specifying the control name of the corresponding control. Control names originally encoded in NON-ASCII character sets could be encoded using the method outlined in [RFC2045].
Thus, for example, for a control named "MyControl", the corresponding part would be specified:
Content-disposition:form-data; Name= "MyControl"
As with all MIME transmissions, "CR LF" (i.e., `%0D%0A‘ ) are used to separate lines of data.
Each of the encoded and the "content-transfer-encoding" header supplied if the value of the, the does not conform to The default (7BIT) encoding (see [RFC2045], section 6)
If the contents of a file is submitted with a form, the file input should is identified by the appropriate content type ( e.g., "Application/octet-stream"). If multiple files is to being returned as the result of a single form entry, they should be returned as "multipart/mixed" em Bedded within the "Multipart/form-data".
The user agent should attempt to supply a, file name for each submitted file. The file name is specified with the "filename" parameter of the ' Content-disposition:form-data ' header, or, the CA SE of multiple files, in a ' content-disposition:file ' header of the Subpart. If the file name of the client ' s operating system is not in Us-ascii, the file name might be approximated or encoded using The method of [RFC2045]. This is convenient for those cases where, for example, the uploaded files might contain references to all other (e.g., a TeX file and its ". Sty" auxiliary style description).
The following example illustrates "Multipart/form-data" encoding. Suppose we have the following form:
<form action= "Http://server.com/cgi/handle" enctype= "Multipart/form-data" method= "POST" > < p> What's your name? <input type= "text" name= "Submit-name" ><BR> What's files is sending? <i Nput type= "file" name= "files" ><BR> <input type= "Submit" value= "Send" > <input type= "Reset" > </FORM>
If the user enters "Larry" in the text input, and selects the text file "File1.txt", the user agent might send back the FO Llowing Data:
Content-type:multipart/form-data; boundary=aab03x --aab03x content-disposition:form-data name= "Submit-name" Larry --aab03x content-disposition:form-data; name= "Files"; filename= "File1.txt" Content-type:text/plain contents of file1.txt ... --aab03x--
If the user selected a second (image) file "File2.gif", the user agent might construct the parts as follows:
Content-type:multipart/form-data; boundary=aab03x --aab03x content-disposition:form-data name= "Submit-name" Larry --aab03x Content-disposition:form-data; Name= "Files" content-type:multipart/mixed; boundary=bbc04y --bbc04y content-disposition:file; Filename= "file1.txt" content-type:text/plain ... contents of file1.txt ... --bbc04y content-disposition:file; filename= "File2.gif" content-type:image/gif Content-transfer-encoding:binary contents of file2.gif ... --bbc04y-- --aab03x--
Brother, it's called multipart!