- рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ POST рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗрдВ;
- рдХреБрдХреАрдЬрд╝ рднреЗрдЬреЗрдВ;
- рдПрдХ рд╕рд╛рде рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдпрд╛ рдХрдИ рд╣рдЬрд╝рд╛рд░ - рдпрд╣рд╛рдБ рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ);
- рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рднреЗрдЬреЗрдВ;
- рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореЗрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рддрдХ рдпрд╛ рд╕рдореВрд╣ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рддрдХ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; (рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдореЗрдВ POST рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдПрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рд╣реИ)
рдлреНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдХреЗрд╡рд▓ рдмреВрдЯрд▓реЛрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рддреЛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЦреЛрдЬ рдереА: SWFupload, Uploadify рдФрд░ рдЕрдиреНрдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреАрдбрд╝реЗ, рдХреАрдбрд╝реЗ, рдХреАрдбрд╝реЗред Flash рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рд╕реА рдЪрд░ рдХреЗ рдирд╛рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред SWFupload рдХреБрдХреАрдЬрд╝ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдХреБрдХреА рдХрд▓реЗрдХреНрдЯрд░ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ GET рдпрд╛ POST рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╕реАрдПрдордПрд╕ рд╣реИ рдЬреЛ рдХреБрдХреАрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлреНрд▓реИрд╢ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рдЪреВрдВрдХрд┐ FileApi рдХреЗрд╡рд▓ FF 3.0+, Chrome рдФрд░ Safari 4+ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рд╕реВрдХреНрд╖реНрдорддрд╛ рдирдВрдмрд░ 1
Chrome рдореЗрдВ readAsBinaryString рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдПрдХ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдкреАрдЯрдиреЗ рдореЗрдВ рдЖрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рдореВрд▓ рдЖрдХрд╛рд░ рд╕реЗ рд▓рдЧрднрдЧ 1.5 рдЧреБрдирд╛ рд╣реИред рд╣рдордиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдХреНрд░реЛрдорд┐рдпрдо (рд╕рд╛рде рд╣реА рд╕рдлрд╛рд░реА) рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдлреЙрд░реНрдордбрд╛рдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
FF (4.0 рддрдХ) рдореЗрдВ POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ + рдХреБрдЫ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ / рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ:
Content-Type: multipart/form-data; boundary=------multipartformboundary1295790618
\r\n
--------multipartformboundary1295790618
\r\n
Content-Disposition: form-data; name='user_files[]';filename='My_File1.jpg'
\r\n
Content-Type: application/octet-stream
\r\n
\r\n
\r\n
--------multipartformboundary1295790618
\r\n
Content-Disposition: form-data; name='user_files[]';filename='My_File2.jpg'
\r\n
Content-Type: application/octet-stream
\r\n
\r\n
\r\n
--------multipartformboundary1295790618
\r\n
Content-Disposition: form-data; name='my_param'
\r\n
\r\n
Param_value
\r\n
--------multipartformboundary1295790618
\r\n
Content-Disposition: form-data; name='my_param'
\r\n
\r\n
Param_value
\r\n
--------multipartformboundary1295790618--
\r\n
рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕рдВрдЦреНрдпрд╛ 2
FormData рд╕рдорд░реНрдерди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
function isFormDataSupported() {
return (window.FormData);
}
рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕рдВрдЦреНрдпрд╛ 3
FF 3.0 / 3.5 рдФрд░ FF 3.6 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдПрдлрдПрдл 3.0 / 3.5: рд░реАрдбрдЕрдВрд╕рд▓ ()
FF 3.6: getAsBinary ()
рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕рдВрдЦреНрдпрд╛ рек
XMLHttpRequest рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╛рдЗрд▓ рднреЗрдЬрдиреЗ рдореЗрдВ рднреА рдЕрдВрддрд░ рд╣реИ:
FormData рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Send () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ getAsBinary () рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдпрд╛ readAsBinaryString рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ sendAsBinary () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕рдВрдЦреНрдпрд╛ 5
рдПрдлрдПрдл рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХреНрд░реЛрдо рдпрд╛ рд╕рдлрд╛рд░реА рдХреЗ рд╡рд┐рдкрд░реАрдд XMLHttpRequest рдХреА рдкреНрд░рдЧрддрд┐ рдШрдЯрдирд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдлрдПрдл рдкреНрд░рдЧрддрд┐ рдШрдЯрдирд╛ рдХрднреА-рдХрднреА рдмрд╣реБрдд рддреЗрдЬ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдпрд╛ рдХрд┐рд╕реА рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рдереАред
рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕рдВрдЦреНрдпрд╛ рем
XMLHttpRequest рдХреА FF рдореЗрдВ рдЧрд░реНрднрдкрд╛рдд рдХреА рдШрдЯрдирд╛ рднреА рддреНрд░реБрдЯрд┐ рдШрдЯрдирд╛ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╣рд╛рдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд╣реИ - рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕рдВрдЦреНрдпрд╛ 7
PHP рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ php.ini рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:
post_max_size - POST рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ред
upload_max_filesize - рдЕрдзрд┐рдХрддрдо рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ред
max_file_uploads - рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ред
рдпрджрд┐ рдЖрдк рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЕрдкрдиреА рд╕рд░реНрд╡рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред
рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ (рд╡рд┐рд╕реНрддрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд╣реИ)
рдбреЗрдореЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
AJAX рдбрд╛рдЙрдирд▓реЛрдб рдкрд░ рдЕрдЪреНрдЫреА рдкреНрд░рд╕реНрддреБрддрд┐
рдЕрджреНрдпрддрди:
рд╕реВрдХреНрд╖реНрдорддрд╛ рдирдВрдмрд░ 8 (рдЗрд╕ рдмрдЧ рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрд▓реНрдЯреИрди рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж)
рд╡рд┐рдВрдбреЛрдЬ рдкрд░, [рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = рдлрд╝рд╛рдЗрд▓ рдПрдХрд╛рдзрд┐рдХ] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ:
рдЪрдпрди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреА рдХреБрд▓ рд▓рдВрдмрд╛рдИ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП - 256 рд╡рд░реНрдг, рдПрдлрдПрдл рдХреЗ рд▓рд┐рдП - 4096 (рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдирд╛рдореЛрдВ рдХреА рдХреБрд▓ рд▓рдВрдмрд╛рдИ, рдЕрд░реНрдерд╛рддреН, рдЕрдЧрд░ рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ 20 рд╡рд░реНрдг рд╣реИрдВ, рддреЛ рдХреНрд░реЛрдо рдореЗрдВ рдЖрдк рдЕрдзрд┐рдХрддрдо 10 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рдмрдЧ рд╡рд┐рд╡рд░рдг:
codereview.chromium.org/4198004