рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдмреВрдБрдж-рднрдВрдбрд╛рд░рдг: рдХреЛрд░ рд╕рдкреЛрд░реНрдЯ

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

рдХреЛрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ (рдмреВрдБрдж-рднрдВрдбрд╛рд░рдг) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдмрдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
1. рдПрдХ рднрдВрдбрд╛рд░ рдмрдирд╛рдПрдБ
2. рдХреЛрд░ рд╕рдорд░реНрдерди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
3. рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА рдмрдирд╛рдПрдВ (рд╕рд╛рдЭрд╛ рдкреНрд░рд╡реЗрд╢ рд╣рд╕реНрддрд╛рдХреНрд╖рд░)
4. рдмреВрдЯрд▓реЛрдбрд░ рд▓рд┐рдЦреЗрдВ

рднрдВрдбрд╛рд░рдг рд╕реГрдЬрди


рднрдВрдбрд╛рд░рдг рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдПрдЬрд╝реНрдпреЛрд░ рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реНрдХреНрд░реАрди

рд╕реНрдЯреЛрд░реЗрдЬ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдирд╛рдо, рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдЪрд╛рд╣рд┐рдПред
рд╕реНрдХреНрд░реАрди



рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдкреЛрд░реНрдЯрд▓ рдореЗрдВ рдпрд╛ рдХреЛрдб рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдХреНрд░реАрди


c # рдмреНрд▓реЙрдм рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдВ
CloudStorageAccount account = CloudStorageAccount.Parse("connectionString"); CloudBlobClient client = account.CreateCloudBlobClient(); CloudBlobContainer container = client.GetContainerReference("containername"); if (container.CreateIfNotExists()) { container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); } 


рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░рдирд╛


рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗрд╡рд╛ (рдмреВрдБрдж, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдХрддрд╛рд░) рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдзрд┐рдХрддрдо рдкрд╛рдБрдЪ рдХреЛрд░ рдирд┐рдпрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдПрдХ рдирд┐рдпрдо рдореЗрдВ рдХрдИ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдиреБрдордд рдбреЛрдореЗрди

рдЖрдк рдХрд╣реАрдВ рд╕реЗ рднреА рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП * рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдбреЛрдореЗрди рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ http://domain.com рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрд░реЛрдз https://domain.com рдпрд╛ http: // рд╕реЗ рд╣реИ Domain.com рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред)

рдЕрдиреБрдордд рд╣реЗрдбрд░

рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣реЗрдбрд░ рд╕реВрдЪреА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдорд╛рдирдХ рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╕реНрд╡реАрдХрд╛рд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ, рдФрд░ рдмреВрдБрдж-рд╡рд┐рд╢рд┐рд╖реНрдЯ: x-ms-blob-type, x-ms-blob-content-type рдФрд░ x-ms-blob-cache-controlред

рдЕрдиреБрдордд рд╡рд┐рдзрд┐рдпрд╛рдБ

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

рдЬреАрд╡рди рдХрд╛рд▓

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

рдирд┐рдпрдо

рдпрджрд┐ рдЖрдк .net рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ (рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд╕рднреА рдХреЛ REST-API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ Microsoft.WindowsAzure.Storage рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирдЧреЗрдЯ рд╣реИред
 PM> Install-Package WindowsAzure.Storage 


 CorsRule corsRule = new CorsRule { AllowedOrigins = new List<string> { "http://allowed.domain.com", "https://allowed.domain.com" }, AllowedHeaders = new List<string> { "x-ms-blob-*", "content-type", "accept" }, AllowedMethods = CorsHttpMethods.Put, MaxAgeInSeconds=60*60 }; 


рдПрдХ рдирд┐рдпрдо рдХреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛

 ServiceProperties serviceProperties = new ServiceProperties { //  ( ,  ) -     CORS DefaultServiceVersion = "2013-08-15", //,    ,    NullReference exception //    Logging = new LoggingProperties { Version = "1.0", LoggingOperations = LoggingOperations.None }, HourMetrics = new MetricsProperties { Version = "1.0", MetricsLevel = MetricsLevel.None }, MinuteMetrics = new MetricsProperties { Version = "1.0", MetricsLevel = MetricsLevel.None } }; //    serviceProperties.Cors.CorsRules.Add(corsRule); //    client.SetServiceProperties(serviceProperties); 


рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред


рдЗрд╕рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рднреА рд╣реИ: рдХреБрдВрдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рдкрддрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рднреАрддрд░ рдорд╛рдиреНрдп рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдмрдирддрд╛ рд╣реИ:
 CloudBlobContainer container = client.GetContainerReference("containername"); string key=container.GetSharedAccessSignature(new SharedAccessBlobPolicy { Permissions = SharedAccessBlobPermissions.Write, SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-1), //   SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(60), //   }) 


рд▓реЛрдбрд░


рдЕрдм, рд╕рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ рдмреВрдЯрд▓реЛрдбрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореЗрдВ, рдмреНрд▓рдмреНрд╕ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ - рдмреНрд▓реЙрдХ рдФрд░ рдкреЗрдЬред рдкреГрд╖реНрда рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ (рд╡реАрдбрд┐рдпреЛ, рдСрдбрд┐рдпреЛ, рдЖрджрд┐) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ 512 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдХрдЯреМрддреАред рдЙрдирдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ 1 рдЯреАрдмреА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЕрдзрд┐рдХрддрдо 400GB рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдмреНрд▓рдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдХ рдмреВрдЯ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдпрд╣ 64 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╛рдиреА рдлрд╝рд╛рдЗрд▓ 64 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрдЯреМрддреА рдХреА рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдСрдкрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдПрдХ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд╣реБрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ 512KB рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рддрджрдиреБрд╕рд╛рд░, рдмреВрдЯрд▓реЛрдбрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛ред
 10    20     30      10 40     


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

рд╣рдо рдирдП рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ FileReader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗред
 var reader=new FileReader(); 


рдЖрдЗрдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдВ, рдЬреЛ рдмреНрд▓реЙрдХ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рднреЗрдЬреЗрдЧрд╛:
 reader.onloadend = function(e) { if (e.target.readyState == FileReader.DONE) { // DONE == 2 //url    ,  ,  ,      //     var uri = submitUri + '&comp=block&blockid=' + blockIds[blockIds.length - 1]; var requestData = new Uint8Array(e.target.result); $.ajax({ url: uri, type: "PUT", data: requestData, processData: false, //preflight request beforeSend: function (xhr) { xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob'); xhr.setRequestHeader('Content-Length', requestData.length); }, success: function () { bytesUploaded += requestData.length; var percentage = ((parseFloat(bytesUploaded) / parseFloat(files[fileIndex].size)) * 100).toFixed(2); $('#progress_'+fileIndex).text(' : ' + percentage + '%'); processFile(); }, error: function () { $('#progress_' + fileIndex).text(' '); } }); } 


рдФрд░ рдЗрд╕ рддрд░рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рджрд┐рдЦрддрд╛ рд╣реИ:
 function processFile() { if (bytesRemain > 0) { //   blockIds.push(btoa(blockId())); //   var fileContent = files[fileIndex].slice(streamPointer, streamPointer + blockSize); reader.readAsArrayBuffer(fileContent); streamPointer += blockSize; bytesRemain -= blockSize; if (bytesRemain < blockSize) { blockSize = bytesRemain; } } else { // ,     commitBlocks(); } } 


рдЬрдм рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрдврд╝рдирд╛ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдмреНрд▓реЙрдХ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдмреНрд▓реЙрдХ рдХреЛ рдЧреЛрдВрдж рдХрд░реЗред
 function commitBlocks() { //    var uri = submitUri + '&comp=blocklist'; var requestBody = '<?xml version="1.0" encoding="utf-8"?><BlockList>'; for (var i = 0; i < blockIds.length; i++) { requestBody += '<Latest>' + blockIds[i] + '</Latest>'; } requestBody += '</BlockList>'; $.ajax({ url: uri, type: 'PUT', data: requestBody, beforeSend: function (xhr) { // mime-type  ,  xhr.setRequestHeader('x-ms-blob-content-type', files[fileIndex].type); //  ,   xhr.setRequestHeader('x-ms-blob-cache-control', 'max-age=31536000'); xhr.setRequestHeader('Content-Length', requestBody.length); }, success: function () { $('#progress_' + fileIndex).text(''); ($('<a>').attr('href', storageurl + files[fileIndex].name).text(files[fileIndex].name)).appendTo($('#progress_' + fileIndex)); fileIndex++; startUpload(); }, error: function () { $('#progress_' + fileIndex).text(' '); } }); } 


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

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд: https://github.com/unconnected4/CORSatWindowsAzureBlobStorage

рд▓рд┐рдВрдХ рдкрдврд╝рдирд╛:

HTML5 рдлрд╝рд╛рдЗрд▓ API: рд╕рд░реНрд╡рд░ рдкрд░ рдХрдИ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рд╣реЛрддреА рд╣реИ
рдмреНрд▓реЙрдм (REST-API) рдбрд╛рд▓реЗрдВ - рд╣реЗрдбрд░ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдорд╣рддреНрд╡рдкреВрд░реНрдг
рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рдХреНрд░реЙрд╕-рдСрд░рд┐рдЬрдирд▓ рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ (рдХреЙрд░реНрд╕) - рдХреБрдЫ рдордЬрд╝рд╛ рджреЗрддрд╛ рд╣реИ
рд╕рд╛рдЭрд╛ рдкрд╣реБрдВрдЪ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, HTML рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдмреНрд▓реЙрдм рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛

рдЬреА +

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


All Articles