рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ + рдиреЗрдЧрдиреЗрдХреНрд╕ = рд░реЗрдЬрд╝реНрдпреВрдореЗрдмрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб

рдпрд╣ рдЖрд▓реЗрдЦ Files@mail.ru рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЕрдХреНрд╖рдп рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред



рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрдм рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЫреЛрдЯреЗ рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд╛рдЙрдирд▓реЛрдб рдЖрдорддреМрд░ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп <input type=file/>



рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдо рдЕрдХреНрд╕рд░ - рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдо - рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ (рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдПрдлрд╝рдЯреАрдкреА рдбрд╛рдЙрдирд▓реЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред



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



рдХреНрдпрд╛ рдХрд░реЗрдВ?



рд╣рдореЗрдВ рдРрд╕реА рдЬрд┐рдВрджрдЧреА рдХреИрд╕реЗ рдорд┐рд▓реА



рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП FileReference.load () рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдбреЛрдм рдлреНрд▓реИрд╢ 10 рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реА рдЕрдлрд╡рд╛рд╣реЛрдВ рдиреЗ рд╣рдореЗрдВ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛: Adobe "рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдкрдЫрд╛рдбрд╝ рджрд┐рдпрд╛"ред FileReference.load () рд╡рд┐рдзрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ (рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдмрдбрд╝реЗ" 2 рдЬреАрдмреА рд░реИрдо рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ 500 рдПрдордмреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП "рдорд╢реАрди рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд" рдХрд░рддреА рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝реНрд▓реИрд╢ 2GB рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рд╣рдо рджреБрдЦреА рдФрд░ рдирд┐рд░рд╛рд╢ рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд╕реЗ рдЖрдВрд╢рд┐рдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ рдпрд╣ рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ред



рдФрд░ рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдордиреЗ рд╕реЛрдЪрд╛: "рдФрд░ рдЪрд▓реЛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рд╣рдореЗрдВ рдлреНрд▓реИрд╢ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рджреЗрдЧрд╛?" - рдФрд░ рд╣рдорд╕реЗ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реБрдИ рдереАред



рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ, рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдлрд╝реНрд▓реИрд╢ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рдФрд░ рд╕реБрд▓рдн рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрдлрд╝рд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдордирдорд╛рдирд╛ рдСрдлрд╕реЗрдЯ рдкрд░ рдбрд╛рдпрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рддред рд╣рдо рд▓рдЧрднрдЧ рдЕрдирдВрдд рдЖрдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ (рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ 16 384 рдкреАрдмреА рддрдХ) рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рд▓реЗрд░реА рдЦреЛрд▓реЛрдбрдХреЛрд╡ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ (рдпрджрд┐ рдХреЛрдИ рдЕрдЪрд╛рдирдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ nginx_upload_module рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд▓реЗрдЦрдХ рд╣реИ ), рдПрдХ рд╢рд╛рдЦрд╛ рдЬрд┐рд╕реЗ рдЖрдВрд╢рд┐рдХ-рдЕрдкрд▓реЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдирд╛рдо рд╣рдореЗрдВ рд╡рд┐рд╕реНрдордп рдореЗрдВ рд▓реЗ рдЧрдпрд╛ред



Valery рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ, рд╣рдордиреЗ рдПрдХ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде "рдбреЙрдХ" рдХрд┐рдпрд╛ ...



рд╕реБрдЦрдж рдЕрдВрдд



рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдВрдд рдореЗрдВ рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рд╛ред



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



рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреАрдбрд╝реЗ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд▓реЗрд░реА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдФрд░ рд╕реА # рд╕реЗ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред



рдЕрдЧрд╕реНрдд рдХреЗ рдПрдХ рджрд┐рди рдореЗрдВ, рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдкрд╛рдП рдЧрдП рд╕рднреА рдмрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдФрд░ рдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗред



рдФрд░ рдЕрдВрдд рдореЗрдВ - рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдгрдп!



рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛



рдбрд╛рдЙрдирд▓реЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред



рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИред

SessionId = (1100000000 + new Random ().Next(10000000, 99999999)).ToString();



* This source code was highlighted with Source Code Highlighter .






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

UniqueKey = "" ;

try

{

if (FileLength < Constants.MinFilesizeToAdd)

{

throw new Exception();

}

// Adler32 version to compute "unique" file hash

// UniqueKey will be Constants.NumPoints * sizeof(uint) length

int part_size = ( int )((file.Length / Constants.NumPoints) < Constants.MaxPartSize ? file.Length / Constants.NumPoints : Constants.MaxPartSize);

byte [] buffer = new Byte [part_size];

byte [] adler_sum = new Byte [Constants.NumPoints * sizeof ( uint ) / sizeof ( byte )];

int current_point = 0;

int bytesRead = 0;

Stream fs = file.OpenRead();

AdlerChecksum a32 = new AdlerChecksum();

while (current_point < Constants.NumPoints && (bytesRead = fs.Read(buffer, 0, part_size)) != 0)

{

a32.MakeForBuff(buffer, bytesRead);

int mask = 0xFF;

for ( int i = 0; i < sizeof ( uint ) / sizeof ( byte ); i++)

{

UniqueKey += ( char )((mask << (i * sizeof ( byte )) & a32.ChecksumValue) >> (i * sizeof ( byte )));

}

fs.Position = ++current_point * file.Length / Constants.NumPoints;

}

}

catch (Exception) { }




* This source code was highlighted with Source Code Highlighter .






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



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

UriBuilder ub = new UriBuilder(UploadUrl);

HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ub. Uri );

webrequest.Method = "POST" ;

webrequest.ContentType = "application/octet-stream" ;

// Some russian letters in filename lead to exception, so we do uri encode on client side

// and uri decode on server side

webrequest.Headers[ "Content-Disposition" ] = "attachment; filename=\"" + HttpUtility.UrlEncode( File .Name) + "\"" ;

webrequest.Headers[ "X-Content-Range" ] = "bytes " + currentChunkStartPos + "-" + currentChunkEndPos + "/" + FileLength;

webrequest.Headers[ "Session-ID" ] = SessionId;

webrequest.BeginGetRequestStream( new AsyncCallback(WriteCallback), webrequest);




* This source code was highlighted with Source Code Highlighter .






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



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



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



рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреА рд╕реАрдорд╛рдПрдБ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдерд╛:



1. рдЖрдк рдХрдВрдЯреЗрдВрдЯ-рд░реЗрдВрдЬ рд╣реЗрдбрд░ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХреНрд╕-рдХрдВрдЯреЗрдВрдЯ-рд░реЗрдВрдЬ рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ



2. рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдХреЛрдб рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ 200 рдпрд╛ 404 рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ (рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ HTTP рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп)



3. рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ HTTP рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЦреЛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреБрдХреАрдЬрд╝ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП, рд╣рдо 201 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде HTTP рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

if (ResponseText != null && ResponseText.Length != 0)

{

// We cannot check response.StatusCode, see comments in constructor of FileUploadControl

if (Regex.IsMatch(ResponseText, @"^\d+-\d+/\d+" )) // we got 201 response

{

...

}

else // we got 200 response

{

BytesUploaded = FileLength;

}

}




* This source code was highlighted with Source Code Highlighter .






4. рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ "рд╕рд╣реА" рдлрд╝рд╛рдЗрд▓ рд╣реИрд╢ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, md5) рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ - рджрд╕рд┐рдпреЛрдВ рд╕реЗрдХрдВрдб - рдЬреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо 100KB рдХреА рдлрд╝рд╛рдЗрд▓ рдХреЗ 50 рднрд╛рдЧреЛрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╣рдо Adler32 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛) рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдХрд░ рдХреА рд╕рд▓рд╛рд╣ рдкрд░ рдЗрд╕рдХреА рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг) рдФрд░ рдлрд┐рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рддреНрд░рд╛рдУрдВ рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ - рдпрд╣ "рд╡рд┐рд╢рд┐рд╖реНрдЯ" рдлрд╝рд╛рдЗрд▓ рд╣реИрд╢ рд╣реИ



5. рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдХреБрдЫ рд░реВрд╕реА рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ (рдЕрдХреНрд╖рд░ "z" рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ Microsoft рдХреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛) рдиреЗ рд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ ...

webrequest.Headers[ "Content-Disposition" ] = "attachment; filename=\"" + File .Name + "\"" ;



* This source code was highlighted with Source Code Highlighter .






... рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмреВрдЯ рдкрд░ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рдХреЛрдб рдХрд░рдирд╛

webrequest.Headers[ "Content-Disposition" ] = "attachment; filename=\"" + HttpUtility.UrlEncode( File .Name) + "\"" ;



* This source code was highlighted with Source Code Highlighter .






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



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

public long FileLength

{

get { return fileLength; }

set

{

fileLength = value ;

ChunkSize = ( long )(fileLength / (100 / Constants.PercentPrecision));

if (ChunkSize < Constants.MinChunkSize)

ChunkSize = Constants.MinChunkSize;

if (ChunkSize > Constants.MaxChunkSize)

ChunkSize = Constants.MaxChunkSize;

}

}




* This source code was highlighted with Source Code Highlighter .






7. рдУрдкреЗрд░рд╛ рдореЗрдВ рдПрдХ рдЕрдкреНрд░рд┐рдп рдмрдЧ рд╣реИ (рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрдЯрдХ рдЬрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдПрдХ): рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓рд╛ рд╢рд░реАрд░ рд╣реИ, рддреЛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░реАрдбрд░ рд░реАрдбрд┐рдВрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ Valery рдХреЛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред



рд╣рдордиреЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрдкреНрд░рд┐рдп рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрд╛, рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХрдо рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╣реЛред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд╛рд░реНрдЯ рдХреЛрдб рдЦреЛрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдорд┐рд▓рд┐рдП MrUploader рд╕реЗ ред рд╕рд╛рде рдореЗрдВ Valery Kholodkov рдХреЗ nginx-upload рдореЙрдбреНрдпреВрд▓, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╣реИред



All Articles