HTML5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╣рдордиреЗ рдХрд┐рддрдиреА рдмрд╛рд░ рдмреБрд░реЗ рд╢рдмреНрдж рдХрд╣реЗ

рдХрд╛рд░реНрдп рдерд╛: рдорд▓реНрдЯреАрдмреВрдЯ рдХреЗ рд▓рд┐рдП HTML5 рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдмреВрдЯрд▓реЛрдбрд░ рдЪрд╛рд╣рд┐рдП:



рдлреНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдХреЗрд╡рд▓ рдмреВрдЯрд▓реЛрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рддреЛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ




рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЦреЛрдЬ рдереА: 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



All Articles