2012 рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛

рдПрдХ рдмрд┐рдВрджреБ рдкрд░, рдореБрдЭреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдореИрдВ Mail.Ru рдореЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реА рд╕реАрдзреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЕрдкрдиреЗ рд╕рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдХрд┐рд╕реА рднреА рдореЗрд▓ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдлреНрд▓реИрд╢-рд▓реЛрдбрд░ рдерд╛, рдЬреЛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрдирдХреЗ рдкрд╛рд╕ рдХрдИ рдХрдорд┐рдпрд╛рдБ рдереАрдВред рд╕рднреА рд▓реЗрдЖрдЙрдЯ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЛ рдЗрд╕рдореЗрдВ рддрд╛рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдорд╛рдзрд╛рди рдмреЛрдЭрд┐рд▓ рдерд╛, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдлреНрд▓реИрд╢ рдбреЗрд╡рд▓рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рд╣рдореЗрдВ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирдП рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдЬреЛ рд▓реЛрдЧ рдлреНрд▓реИрд╢-рд▓реЛрдбрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рд╡реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:


рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕рдм рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдпрд╣ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ - рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рд╣реИ:



рдкрд┐рдЫрд▓реЗ 4 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд╕рд╣рд┐рдд рдПрдЪрдЯреАрдПрдордПрд▓ 5 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рддреЗрдЬреА рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдХрд╛рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЙрдкрдХрд░рдг рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ? рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ Mail.Ru рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХреЗрд╡рд▓ рд╡реЗ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд╕реВрдЪреА рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ, рднрд▓реЗ рд╣реА 100% рди рд╣реЛрдВред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ 63% рд╕реЗ рдЕрдзрд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдиреЗ рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛:


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рдЬрд┐рдирдХреА рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдмрдврд╝ рд░рд╣реА рд╣реИред iOS 6 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред

Internet Explorer рд╕рдВрд╕реНрдХрд░рдг 10 рд╕реЗ рд╕рдорд░реНрдерди рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди 63% рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ 100% рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдлреНрд▓реИрд╢ рдХреЛ рдордирд╛ рдХрд░рдирд╛ рдЬрд▓реНрджрдмрд╛рдЬреА рд╣реЛрдЧреАред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдп рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдХрд╕рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рддрдХрдиреАрдХреЛрдВ (рдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдФрд░ рдлреНрд▓реИрд╢) рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдВрддрд┐рдо рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдкрд░рд╡рд╛рд╣ рди рд╣реЛ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред рдХрд╛рд░реНрдп рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдПрдХреАрдХреГрдд рдПрдкреАрдЖрдИ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реБрдЖ, рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ Mail.Ru рдореЗрд▓ рдХреЗ рднреАрддрд░ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрд╣реАрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЗрдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╣реБрдИред


рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдпрд╣ рдХреИрд╕реЗ HTML5 рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

<input id="file" type="file" multiple /> <script> var input = document.getElementById("file"); input.addEventListener("change", function (){ var files = input.files; }, false); </script> 

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░реЗрдВ рдЬрдм рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд▓реИрд╢ рд╕рдорд░реНрдерд┐рдд рд╣реИ? рдлреНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реАрдзреЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдлрд╝рд╛рдЗрд▓ рдЪрдпрди рд╕рдВрд╡рд╛рдж рдХреЛ рдХреЗрд╡рд▓ рд▓реЗ рдФрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд╝реНрд▓реИрд╢ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдЗрд╕ рд╕рдордп рдПрдХ рд╕рдВрд╡рд╛рдж рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдРрд╕реА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдлрд╝реНрд▓реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдЗрдирдкреБрдЯ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдорд╛рдЙрд╕рдУрд╡рд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЖрдк "рдореВрд▓" рдореЗрдВ рдЗрдирдкреБрдЯ [рдкреНрд░рдХрд╛рд░ = "рдлрд╝рд╛рдЗрд▓"] рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлреНрд▓реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдкреВрд░реНрдг рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред

рдЬрдм рдЖрдк рдПрдХ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╡рд╛рдж рдЦреБрд▓рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЪреБрдирддрд╛ рд╣реИ рдФрд░ рдареАрдХ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рдХреЛ рдлреНрд▓реИрд╢ рд╕реЗ рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЗрдПрд╕ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдЗрдирдкреБрдЯ рд╕реЗ рдмрд╛рдВрдзрддрд╛ рд╣реИ рдФрд░ "рдкрд░рд┐рд╡рд░реНрддрди" рдШрдЯрдирд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред
рдлреНрд▓реИрд╢ -> рдЬреЗ.рдПрд╕.
 [[Flash]] --> jsFunc([{ id: "346515436346", //   name: "hello-world.png", //   type: "image/png", // mime-type size: 43325 //  }, { // etc. }]) 

рдЬреЗрдПрд╕ рдФрд░ рдлреНрд▓реИрд╢ рдХреЗ рдмреАрдЪ рд╕рднреА рдЖрдЧреЗ рдХреА рдмрд╛рддрдЪреАрдд рдлреНрд▓реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХрдорд╛рддреНрд░ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧреАред рдкрд╣рд▓рд╛ рддрд░реНрдХ рдХрдорд╛рдВрдб рдХрд╛ рдирд╛рдо рд╣реИ, рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рд╣реИрдВ: рдлрд╝рд╛рдЗрд▓ рдЖрдИрдбреА рдФрд░ рдХреЙрд▓рдмреИрдХред рдХрдорд╛рдВрдб рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдлреНрд▓реИрд╢ рд╕реЗ рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

 flash.cmd("imageTransform", { id: "346515436346", //   matrix: { }, //   callback: "__UNIQ_NAME__" }); 

рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдорд┐рд▓рд╛ рдЬреЗрдПрд╕ред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣реИред рдЕрдм рд╣рдо рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдкреБрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╛рдЗрд▓ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ рдЕрдЧрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ HTML5 / рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ; рдлреНрд▓реИрд╢ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реВрдЪреА рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗ рд▓реА рдЧрдИ рд╣реИред

 <span class="js-fileapi-wrapper" style="position: relative"> <input id="file" type="file" multiple /> </span> <script> var input = document.getElementById("file"); FileAPI.event.on(input, "change", function (){ var files = FileAPI.getFiles(input); }); </script> 

рдпрд╛ рддреЛ
 <span class="js-fileapi-wrapper" style="position: relative"> <input id="file" type="file" multiple /> </span> <script> var input = document.getElementById("file"); FileAPI.event.on(input, "change", function (evt){ var files = FileAPI.getFiles(evt); }); </script> 


рдЫрд╛рдирдиреЗ


рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдХрдИ рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЗрдВ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░, рдкреНрд░рдХрд╛рд░ рдФрд░ рдЪреМрдбрд╝рд╛рдИ / рдЫрд╡рд┐ рдХреА рдКрдВрдЪрд╛рдИ рд╣реИред рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдпреЛрдЬрдирд╛: рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдИ, "рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ"ред рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬрд┐рд╕рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред

рдХрдард┐рдирд╛рдИ рдХреНрдпрд╛ рд╣реИ? рдкреВрд░реЗ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдирд╛рдо, рдЖрдХрд╛рд░ рдФрд░ рдкреНрд░рдХрд╛рд░ред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ FileReader рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
IE10 рдФрд░ FileReader
 тАЛ//    , IE10  HTML5/FileAPI: var reader = new FileтАЛReader; reader.readAsBinaryString(file); // error: Object doesn't support method or property "readAsBinaryString" тАЛ// ,  ! var reader = new FileReader; reader.onload = function (evt){ var base64 = evt.result.replace(/^data:[^,]+,/, ''); var binaryString = window.atob(base64); // bingo! }; reader.readAsDataURL(file); 

рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реИ:

 FileAPI.filterFiles(files, function (file, info){ if( /^image/.test(file.type) ){ return info.width > 320 && info.height > 240; } else if( file.size ){ return file.size < 10 * FileAPI.MB; } else { // ,   File API  Flash,    . //   ,     ,    . return true; } }, function (files, ignore){ if( files.length > 0 ){ // ... } }); 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдЫрд╡рд┐ рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЕрднреА рднреА рд╣реИ:

 FileAPI.addInfoReader(/^audio/, function (file, callback){ //    //    callback( false, //    { artist: "...", album: "...", title: "...", ... } ); }); 



рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде - рдФрд░ рдпрд╣ рдХрд┐ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдФрд░ рдлреНрд▓реИрд╢ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдлрд╝реНрд▓реИрд╢
рдкрд╣рд▓рд╛ рдХрджрдо рдпрд╣ рд╕рдордЭрдирд╛ рдерд╛ рдХрд┐ рдлреНрд▓реИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рдХреЛ рдХреНрдпрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдпрд╣ рдбреЗрдЯрд╛ рдпреВрдЖрд░рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлреНрд▓реИрд╢ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмреЗрд╕ 64 рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ, рдЬреЗрдПрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд рдореЗрдВ, тАЬdata: image / png; base64,тАЭ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ тАЬsrcтАЭ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВред

рд╣реИрдкреНрдкреА рдПрдВрдб? рдХрд╛рд╢, IE6-7 рдбреЗрдЯрд╛ URIs рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛, рдФрд░ IE8 + рдЬреЛ рдбреЗрдЯрд╛ URI рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, 32 KB рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, JS рдПрдХ рджреВрд╕рд░реА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ Base64 рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЫрд╡рд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред


рдПрдЪрдЯреАрдПрдордПрд▓ 5
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдореВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдореВрд▓ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ FileReader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ DataURL рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реИред рджреВрд╕рд░рд╛ - URL.createObjectURL рд╡рд░реНрддрдорд╛рди рдЯреИрдм рд╕реЗ рдЬреБрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХреБрдЫ рд╕рд╛рдереА URL.revokeObjectURL рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд▓рд┐рдВрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ FileAPI.Image рдХреНрд▓рд╛рд╕ рдорд┐рд▓рддреА рд╣реИ:



рдпреЗ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рднрд░рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЬрдм рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдпрд╣ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреИрдирд╡рд╕ рдпрд╛ рдлрд╝реНрд▓реИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред

рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡рд┐рд╡рд░рдг
 { //    sx: Number, sy: Number, sw: Number, sh: Number, //   dw: Number, dh: Number, deg: Number } 

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
 FileAPI.Image(imageFle) .crop(300, 300) .resize(100, 100) .get(function (err, img){ if( !err ){ images.appendChild(img); } }) ; 


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ


рджрд░реНрдкрдг рдФрд░ рд╕рд┐рд░реНрдл "рд╕рд╛рдмреБрди рдХреЗ рдмрдХреНрд╕реЗ" рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдореЗрдВ рдЖрдП рд╣реИрдВ, рдЬреЛ рдХрд┐ 10Mpx рд╕реЗ 1.2K рд░реВрдмрд▓ рдХреА рдХреАрдордд рдкрд░ рдЬрд╛рд░реА рд╣реИред рдФрд░ рдЬрдм рд╣рдордиреЗ рдРрд╕реА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдХрдВрдкреНрд░реЗрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рд╛:



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╕рд░рд╛рд╕рд░ рд╡рд┐рдХреГрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ рдФрд░ рдлрд┐рд░ рд╕реЗ, рдЬрдм рддрдХ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддрдм рддрдХ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлрд╝реА рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред



рдпрд╣рд╛рдВ, рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рдЕрдВрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ:



рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рддреЗрдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛрдЧрд╛ред

рд╣рдордиреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреИрд╕реЗ рдХрд┐ рдмрд╛рдЗрдмрд┐рдХ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдФрд░ рд▓реИрдВрдХреНрдЬрд╝реЛрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердоред рд╡реЗ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ: 1.5 рдмрдирд╛рдо 200-300msред рд╕рд╛рде рд╣реА, рдпрд╣ рд╡рд┐рдзрд┐ рдХреИрдирд╡рд╕ рдФрд░ рдлреНрд▓реИрд╢ рдореЗрдВ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрддреА рд╣реИред


рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ


рдореИрдВ рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЕрдм рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


iframe
рд╣рд╛рдБ, рдФрд░ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж рднреА рд╡рд╣ рд╕реЗрд╡рд╛ рдореЗрдВ рд╣реИ:
 <form target="__UNIQ__" action="/upload" method="post" enctype="multipart/form-data"> <iframe name="__UNIQ__"></iframe> <input name="files" type="file" /> <input name="foo" value="bar" type="hidden" /> </form> 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкрд░рд┐рд╡рд╣рди рдлреЙрд░реНрдо рдПрдХ iframe рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рдкрддреНрд░ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ iframe рдХрд╛ рдорд┐рд▓рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ [рдкреНрд░рдХрд╛рд░ = "рдлрд╝рд╛рдЗрд▓"] рдХреЛ рдЙрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдХреНрд▓реЛрди рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ "рдЦрд╛рд▓реА" рд╣реЛрдЧрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдлреЙрд░реНрдо.рд╕реБрдорд┐рдЯ () рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдлреЙрд░реНрдо рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ iframe рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ JSONP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИред


рдлреНрд▓реИрд╢ / рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ
рдлреНрд▓реИрд╢ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ, рдЬреЛ рдлреНрд▓реИрд╢ рдХрд╛ рд╣рддреНрдпрд╛рд░рд╛ рдмрдирдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдПрдХ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реБрдЖред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдЬреЗрдПрд╕ рдлреНрд▓реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓реЛрдб рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрдИрдбреА рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлреНрд▓реИрд╢, рдмрджрд▓реЗ рдореЗрдВ, рдЬреЗрдПрд╕ рдореЗрдВ рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИред


XMLHttpRequest + FormData
рдЕрдм рдЖрдк рди рдХреЗрд╡рд▓ рдкрд╛рда рдбреЗрдЯрд╛, рдмрд▓реНрдХрд┐ рдмрд╛рдЗрдирд░реА рднреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 //     var form = new FormData form.append("foo", "bar"); //    POST-, form.append("attach", file); //  ,   blob //    var xhr = new XMLHttpRequest; xhr.open("POST", "/upload", true); xhr.send(form) 

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрдирд╡рд╛рд╕? рдЗрд╕рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдмрд╕реЗ рд╕рд╣реА рдФрд░ рд╕рд░рд▓ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреИрдирд╡рд╕ рдХреЛ рдмреНрд▓реЙрдм рдореЗрдВ рдмрджрд▓реЗрдВ:
 canvasToBlob(canvas, function (blob){ var form = new FormData form.append("foo", "bar"); form.append("attach", blob, "filename.png"); //      // ... }); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рд╣рд░ рдЬрдЧрд╣ рдирд╣реАрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд╛рд▓ рдХреЛ рдХреНрд░реИрдВрдХ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдпрджрд┐ рдХреИрдирд╡рд╕ рдореЗрдВ рдХреИрдирд╡рд╕ .toBlob рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ (рдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд╣рдо рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдлреЙрд░реНрдордбрд╛рдЯрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рд╛рд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдПрдХ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдирд╛ рд╣реИред рдХреИрдирд╡рд╕ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 var dataURL = canvas.toDataURL("image/png"); //    FileReader var base64 = dataURL.replace(/^data:[^,]+,/, ""); //   var binaryString = window.atob(base64); //  Base64 //    muptipart,   var uniq = '1234567890'; var data = [ '--_'+ uniq , 'Content-Disposition: form-data; name="my-file"; filename="hello-world.png"' , 'Content-Type: image/png' , '' , binaryString , '--_'+ uniq +'--' ].join('\r\n'); var xhr = new XMLHttpRequest; xhr.open('POST', '/upload', true); xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=_'+uniq); xhr.sendAsBinary(data); 

рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ xhr.sendAsBinary рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
 if( xhr.sendAsBinary ){ // ... } else { var bytes = Array.prototype.map.call(data, function(c){ return c.charCodeAt(0) & 0xff; }); xhr.send(new Uint8Array(bytes).buffer); } 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рдзрд┐ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ:
 var xhr = тАЛFileAPI.upload({ url: '/upload', data: { foo: 'bar' }, headers: { 'Session-Id': '...' }, files: { images: imageFiles, others: otherFiles }, imageTransform: { maxWidth: 1024, maxHeight: 768 }, upload: function (xhr){}, progress: function (event, file){}, complete: function (err, xhr, file){}, fileupload: function (file, xhr){}, fileprogress: function (event, file){}, filecomplete: function (err, xhr, file){} });тАЛ 


рдЗрд╕рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрдореЗрдЬрдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдлрд╝реНрд▓реИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ HTML5 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛрдиреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ: рдпрд╣ рднреА imageTransform рдХрдИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
 { huge: { maxWidth: 800, maxHeight: 600, rotate: 90 }, medium: { width: 320, height: 240, preview: true }, small: { width: 100, height: 120, preview: true } } 

рдпрд╛рдиреА рдореВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░реНрд╡рд░ рдЗрд╕рдХреА рддреАрди рдкреНрд░рддрд┐рдпрд╛рдВ рднреА рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпреЛрдВ? рдореЗрд░реА рд░рд╛рдп рдпрд╣ рд╣реИ: рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓реЛрдб рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рддреЛ рдХрд░реЗрдВред рдХреЗрд╡рд▓ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕рддреНрдпрд╛рдкрди рд╕рд░реНрд╡рд░ рдкрд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрд▓реЛрдб рдлрд╝рдВрдХреНрд╢рди рдПрдХ xhr- рдЖрдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрд╣ рдХреБрдЫ XMLHttpRequest рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ:


рдпрджреНрдпрдкрд┐ HTML5 рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдлрд╝реНрд▓реИрд╢ рдЗрдВрдЬрди рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдирд╛ рдорди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рддреЛ, рдЕрдкрд▓реЛрдб рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ xhr рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЙрдХреНрд╕реАрдПрдХреНрд╕рдПрдЪрдЖрд░ рд╣реИред рдЗрд╕рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдЧреБрдг рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рднрд░реА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд░рд╣реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреАред



рдЙрдкрд╕рдВрд╣рд╛рд░


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ drag'n'drop рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
 <div id="el" class="dropzone"></div> <script> if( FileAPI.support.dnd ){ // ,     var el = document.getElementById("el"); //     Drag'n'Drop FileAPI.event.dnd(el, function (over){ //  ,    enter/leave   if( over ){ el.classList.add("dropzone_hover"); } else { el.classList.remove("dropzone_hover"); } }, function (dropFiles){ //    FileAPI.upload({ url: "/upload", files: { attaches: dropFiles }, complete: function (err, xhr){ if( !err ){ //   } } }); }); } </script> 


рдкреБрд╕реНрддрдХрд╛рд▓рдп github, Bugreports рдкрд░ рд╣реИ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
- https://github.com/mailru/FileAPI ( рдбреЗрдореЛ )
- Mail.ru github (рдЯрд╛рд░реЗрдВрдЯреВрд▓, рдлреЗрд╕реНрдЯ рдФрд░ рдЕрдзрд┐рдХ)
- рдЗрдирдкреБрдЯ [рдкреНрд░рдХрд╛рд░ = "рдлрд╝рд╛рдЗрд▓" рдХрдИ]
- рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд╕рдорд░реНрдерди
- рдлрд╛рдЗрд▓рд░
- URL.createObjectURL , URL.revokeObjectURL
- XMLHttpRequest
- рдлреЙрд░реНрдордЯрд╛рдЯрд╛

Source: https://habr.com/ru/post/In159587/


All Articles