Umieść stronę

Operacja Put Page zapisuje zakres stron w stronicowym obiekcie blob.

Żądanie

Żądanie Put Page może zostać skonstruowane w następujący sposób. Protokół HTTPS jest zalecany. Zastąp myaccount nazwą swojego konta magazynu:

PUT Method Request URI Wersja PROTOKOŁU HTTP
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

Emulowany Storage URI usługi

Podczas tworzenia żądania względem emulowanej usługi magazynu określ nazwę hosta emulatora i port Blob service jako , a następnie 127.0.0.1:10000 nazwę emulowanej konta magazynu:

PUT Method Request URI Wersja PROTOKOŁU HTTP
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=page HTTP/1.1

Aby uzyskać więcej informacji, zobacz Using the Azure Storage Emulator for Development and Testing (Używanie usługi Azure Storage Emulator for Development and Testing).

Parametry identyfikatora URI

W żądaniu URI można określić następujące dodatkowe parametry.

Parametr Opis
timeout Opcjonalny. Parametr timeout jest wyrażony w sekundach. Aby uzyskać więcej informacji, zobacz Ustawianie limitów czasu dla operacji usługi Blob Service.

Nagłówki żądań

W poniższej tabeli opisano wymagane i opcjonalne nagłówki żądań.

Nagłówek żądania Opis
Authorization Wymagane. Określa schemat autoryzacji, nazwę konta i podpis. Aby uzyskać więcej informacji, zobacz Autoryzowanie żądań do usługi Azure Storage.
Date lub x-ms-date Wymagane. Określa dla żądania godzinę w formacie uniwersalnego czasu koordynowanego (UTC). Aby uzyskać więcej informacji, zobacz Autoryzowanie żądań do usługi Azure Storage.
x-ms-version Wymagane dla wszystkich autoryzowanych żądań. Określa wersję operacji do użycia dla tego żądania. Aby uzyskać więcej informacji, zobacz Versioning for the Azure Storage Services (Wersjeusług Azure Storage Services).
Range Wymagany Range jest x-ms-range albo .

Określa zakres bajtów, które mają być zapisane jako strona. Należy określić zarówno początek, jak i koniec zakresu. Ten nagłówek jest definiowany przez specyfikację protokołu HTTP/1.1.

W przypadku operacji aktualizacji strony zakres stron może mieć rozmiar do 4 MiB. W przypadku operacji wyczyść stronę zakres stron może być maksymalnie do wartości pełnego rozmiaru obiektu blob.

Biorąc pod uwagę, że strony muszą być wyrównane do granic 512-bajtowych, przesunięcie rozpoczęcia musi być modulo 512, a przesunięcie końcowe musi być modulo 512–1. Przykłady prawidłowych zakresów bajtów to 0-511, 512-1023 itd.

Plik Blob service tylko jeden zakres bajtów dla nagłówka, a zakres bajtów musi być określony Range w następującym formacie: bytes=startByte-endByte .

Jeśli określono zarówno wartości , jak i Range , usługa używa wartości x-ms-range x-ms-range . Aby uzyskać więcej informacji, zobacz Specifying the Range Header for Blob Service Operations (Określanie nagłówka zakresu dla operacji usługi Blob Service).
x-ms-range Wymagany Range jest x-ms-range albo .

Określa zakres bajtów, które mają być zapisane jako strona. Należy określić zarówno początek, jak i koniec zakresu. Ten nagłówek jest definiowany przez specyfikację protokołu HTTP/1.1.

W przypadku operacji aktualizacji strony zakres stron może mieć rozmiar do 4 MiB. W przypadku operacji wyczyść stronę zakres stron może być maksymalnie do wartości pełnego rozmiaru obiektu blob.

Biorąc pod uwagę, że strony muszą być wyrównane do granic 512-bajtowych, przesunięcie rozpoczęcia musi być modulo 512, a przesunięcie końcowe musi być modulo 512–1. Przykłady prawidłowych zakresów bajtów to 0-511, 512-1023 itd.

Plik Blob service tylko jeden zakres bajtów dla nagłówka, a zakres bajtów musi być określony x-ms-range w następującym formacie: bytes=startByte-endByte .

Jeśli określono zarówno wartości , jak i Range , usługa używa wartości x-ms-range x-ms-range . Aby uzyskać więcej informacji, zobacz Specifying the Range Header for Blob Service Operations (Określanie nagłówka zakresu dla operacji usługi Blob Service).
Content-Length Wymagane. Określa liczbę bajtów przesyłanych w treści żądania. Jeśli nagłówek x-ms-page-write jest ustawiony na wartość , wartość tego clear nagłówka musi być ustawiona na zero.
Content-MD5 Opcjonalny. Skrót MD5 zawartości strony. Ten skrót służy do weryfikowania integralności strony podczas transportu. Gdy ten nagłówek jest określony, usługa magazynu porównuje skrót zawartości, która dotarła z tą wartością nagłówka.

Należy pamiętać, że ten skrót MD5 nie jest przechowywany razem z obiektem blob.

Jeśli te dwa skróty nie są zgodne, operacja nie powiedzie się z kodem błędu 400 (Złe żądanie).
x-ms-content-crc64 Opcjonalny. Skrót CRC64 zawartości strony. Ten skrót służy do weryfikowania integralności strony podczas transportu. Gdy ten nagłówek jest określony, usługa magazynu porównuje skrót zawartości, która dotarła z tą wartością nagłówka.

Należy pamiętać, że ten skrót CRC64 nie jest przechowywany z obiektem blob.

Jeśli te dwa skróty nie są zgodne, operacja nie powiedzie się z kodem błędu 400 (Złe żądanie).

Jeśli istnieją nagłówki Content-MD5 i x-ms-content-crc64, żądanie nie powiedzie się z 400 (złe żądanie).

Ten nagłówek jest obsługiwany w wersjach 2019-02-02 lub nowszych.
x-ms-page-write: {update | clear} Wymagane. Możesz określić jedną z następujących opcji:

- Update: zapisuje bajty określone przez treść żądania do określonego zakresu. Nagłówki Range Content-Length i muszą być zgodne, aby przeprowadzić aktualizację.
- Clear: czyści określony zakres i zwalnia miejsce używane w magazynie dla tego zakresu. Aby wyczyścić zakres, ustaw nagłówek na zero, a nagłówek na wartość, która wskazuje zakres do wyczyszczenia, aż Content-Length Range do maksymalnego rozmiaru obiektu blob.
x-ms-encryption-scope Opcjonalny. Wskazuje zakres szyfrowania używany do szyfrowania zawartości żądania. Ten nagłówek jest obsługiwany w wersjach 2019-02-02 lub nowszych.
x-ms-lease-id:<ID> Wymagane, jeśli obiekt blob ma aktywną dzierżawę. Aby wykonać tę operację na obiekcie blob z aktywną dzierżawą, określ prawidłowy identyfikator dzierżawy dla tego nagłówka.
x-ms-if-sequence-number-le: <num> Opcjonalny. Jeśli numer sekwencji obiektu blob jest mniejszy lub równy określonej wartości, żądanie jest kontynuowane. W przeciwnym razie kończy się niepowodzeniem z błędem SequenceNumberConditionNotMet (kod stanu HTTP 412 — niepowodzenie warunku wstępnego).
x-ms-if-sequence-number-lt: <num> Opcjonalny. Jeśli numer sekwencji obiektu blob jest mniejszy niż określona wartość, żądanie będzie kontynuowane. W przeciwnym razie kończy się niepowodzeniem z błędem SequenceNumberConditionNotMet (kod stanu HTTP 412 — niepowodzenie warunku wstępnego).
x-ms-if-sequence-number-eq: <num> Opcjonalny. Jeśli numer sekwencji obiektu blob jest równy określonej wartości, żądanie będzie kontynuowane. W przeciwnym razie kończy się niepowodzeniem z błędem SequenceNumberConditionNotMet (kod stanu HTTP 412 — niepowodzenie warunku wstępnego).
If-Modified-Since Opcjonalny. DateTimeWartość. Określ ten nagłówek warunkowy, aby zapisywać stronę tylko wtedy, gdy obiekt blob został zmodyfikowany od określonej daty/godziny. Jeśli obiekt blob nie został zmodyfikowany, Blob service zwraca kod stanu 412 (Niepowodzenie warunku wstępnego).
If-Unmodified-Since Opcjonalny. DateTimeWartość. Określ ten nagłówek warunkowy, aby zapisać stronę tylko wtedy, gdy obiekt blob nie został zmodyfikowany od określonej daty/godziny. Jeśli obiekt blob został zmodyfikowany, Blob service zwraca kod stanu 412 (Niepowodzenie warunku wstępnego).
If-Match Opcjonalny. Wartość ETag. Określ wartość ETag dla tego nagłówka warunkowego, aby zapisać stronę tylko wtedy, gdy wartość ETag obiektu blob jest taka, jak określona wartość. Jeśli wartości nie są zgodne, Blob service zwraca kod stanu 412 (Niepowodzenie warunku wstępnego).
If-None-Match Opcjonalny. Wartość ETag.

Określ wartość ETag dla tego nagłówka warunkowego, aby zapisać stronę tylko wtedy, gdy wartość ETag obiektu blob nie pasuje do określonej wartości. Jeśli wartości są identyczne, Blob service zwraca kod stanu 412 (Niepowodzenie warunku wstępnego).
x-ms-client-request-id Opcjonalny. Zapewnia wygenerowaną przez klienta nieprzezroczystą wartość z limitem znaków 1 KiB, który jest rejestrowany w dziennikach analizy, gdy jest włączone rejestrowanie analizy magazynu. Używanie tego nagłówka jest wysoce zalecane do korelowania działań po stronie klienta z żądaniami odebranymi przez serwer. Aby uzyskać więcej informacji, zobacz About Storage Analytics Logging and Azure Logging: Using Logs to Track Storage Requests (Informacje o rejestrowaniu analizy danych i rejestrowaniu na platformie Azure: używanie dzienników do śledzenia żądań Storage danych).

Ta operacja obsługuje również używanie nagłówków warunkowych do wykonywania operacji tylko wtedy, gdy określony warunek jest spełniony. Aby uzyskać więcej informacji, zobacz Określanie nagłówków warunkowych dla operacji usługi Blob Service.

Nagłówki żądań (klucze szyfrowania dostarczone przez klienta)

Począwszy od wersji 2019-02-02, w żądaniu można określić następujące nagłówki w celu zaszyfrowania obiektu blob zaszyfrowanego przy użyciu klucza dostarczonego przez klienta. Szyfrowanie za pomocą klucza dostarczonego przez klienta (i odpowiedniego zestawu nagłówków) jest opcjonalne.

Nagłówek żądania Opis
x-ms-encryption-key Wymagane. Klucz szyfrowania AES-256 zakodowany w formacie Base64.
x-ms-encryption-key-sha256 Wymagane. Skrót SHA256 klucza szyfrowania zakodowany w formacie Base64.
x-ms-encryption-algorithm: AES256 Wymagane. Określa algorytm używany do szyfrowania. Wartość tego nagłówka musi być AES256 .

Treść żądania

Treść żądania zawiera zawartość strony.

Przykładowe żądanie: aktualizowanie zakresu bajtów

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1  
  
Request Headers:  
x-ms-page-write: update  
x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT  
x-ms-version: 2011-08-18  
x-ms-range: bytes=0-65535  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
Content-Length: 65536  
  

Przykładowe żądanie: wyczyść zakres bajtów

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1  
  
Request Headers:  
Range: bytes=1024-2048  
x-ms-page-write: clear  
x-ms-date: Sun, 25 Sep 2011 23:37:35 GMT  
x-ms-version: 2011-08-18  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
  

Reakcja

Odpowiedź zawiera kod stanu HTTP i zestaw nagłówków odpowiedzi.

Kod stanu

Pomyślna operacja zwraca kod stanu 201 (Utworzono).

Aby uzyskać informacje o kodach stanu, zobacz Kody stanu i błędów.

Nagłówki odpowiedzi

Odpowiedź na tę operację zawiera następujące nagłówki. Odpowiedź może również zawierać dodatkowe standardowe nagłówki HTTP. Wszystkie standardowe nagłówki są zgodne ze specyfikacją protokołu HTTP/1.1.

Składnia Opis
ETag Tag ETag dla obiektu blob. Jeśli wersja żądania to 2011-08-18 lub nowsza, wartość ETag będzie w cudzysłowie. Tag ETag może służyć do wykonywania operacji Put Page warunkowej, określając jego wartość dla If-Match nagłówka żądania If-None-Match lub .
Last-Modified Data i godzina ostatniej modyfikacji obiektu blob. Format daty jest zgodny ze specyfikacjiĄ RFC 1123. Aby uzyskać więcej informacji, zobacz Representation of Date-Time Values in Headers(Reprezentacja wartości Date-Time w nagłówkach ).

Każda operacja zapisu obiektu blob, w tym aktualizacje metadanych lub właściwości obiektu blob, zmienia czas ostatniej modyfikacji obiektu blob.
Content-MD5 Ten nagłówek jest zwracany, dzięki czemu klient może sprawdzić integralność zawartości wiadomości. Wartość tego nagłówka jest obliczana przez Blob service; Nie musi to być ta sama wartość określona w nagłówkach żądania. W przypadku wersji 2019-02-02 lub nowszej ten nagłówek jest zwracany tylko wtedy, gdy żądanie ma ten nagłówek.
x-ms-content-crc64 W przypadku wersji 2019-02-02 lub nowszej ten nagłówek jest zwracany, aby klient może sprawdzić integralność zawartości wiadomości. Wartość tego nagłówka jest obliczana przez Blob service; Nie musi to być ta sama wartość określona w nagłówkach żądania.

Ten nagłówek jest zwracany, Content-MD5 gdy nagłówek nie jest obecny w żądaniu.
x-ms-blob-sequence-number Bieżący numer sekwencji stronicowego obiektu blob.
x-ms-request-id Ten nagłówek unikatowo identyfikuje żądanie, które zostało wykonane, i może służyć do rozwiązywania problemów z żądaniem. Aby uzyskać więcej informacji, zobacz Troubleshooting API Operations (Rozwiązywanie problemów z operacjami interfejsu API).
x-ms-version Wskazuje wersję pliku Blob service do wykonania żądania. Ten nagłówek jest zwracany w przypadku żądań względem wersji 2009-09-19 i nowszych.
Date Wartość daty/czasu UTC wygenerowana przez usługę, która wskazuje czas, o której została zainicjowana odpowiedź.
x-ms-request-server-encrypted: true/false Wersja 2015-12-11 lub nowsza. Wartość tego nagłówka jest ustawiona na , jeśli zawartość żądania została pomyślnie zaszyfrowana przy true użyciu określonego algorytmu i false w przeciwnym razie.
x-ms-encryption-key-sha256 Wersja 2019-02-02 lub nowsza. Ten nagłówek jest zwracany, jeśli żądanie używa klucza dostarczonego przez klienta do szyfrowania, dzięki czemu klient może upewnić się, że zawartość żądania została pomyślnie zaszyfrowana przy użyciu podanego klucza.
x-ms-encryption-scope Wersja 2019-02-02 lub nowsza. Ten nagłówek jest zwracany, jeśli żądanie używa zakresu szyfrowania, dzięki czemu klient może upewnić się, że zawartość żądania została pomyślnie zaszyfrowana przy użyciu zakresu szyfrowania.
x-ms-client-request-id Ten nagłówek może służyć do rozwiązywania problemów z żądaniami i odpowiadającymi odpowiedziami. Wartość tego nagłówka jest równa wartości nagłówka, jeśli jest obecny w żądaniu, a wartość jest co najwyżej 1024 widocznych znaków x-ms-client-request-id ASCII. Jeśli nagłówek x-ms-client-request-id nie jest obecny w żądaniu, ten nagłówek nie będzie obecny w odpowiedzi.

Treść odpowiedzi

Brak.

Przykładowa odpowiedź

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
x-ms-content-crc64: 77uWZTolTHU  
Date: Sun, 25 Sep 2011 22:33:35 GMT  
ETag: "0x8CB171BA9E94B0B"  
Last-Modified: Sun, 25 Sep 2011 12:13:31 GMT  
x-ms-version: 2011-08-18  
x-ms-blob-sequence-number: 0  
Content-Length: 0  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
  

Autoryzacja

Ta operacja może zostać wywołana przez właściciela konta i przez każdego, kto ma sygnaturę dostępu współdzielonych z uprawnieniami do zapisu do tego obiektu blob lub jego kontenera.

Uwagi

Operacja Put Page zapisuje zakres stron w stronicowym obiekcie blob. Tę operację można wywołać tylko dla istniejącego stronicowego obiektu blob. Nie można go wywołać, aby utworzyć nowy stronicowy obiekt blob, ani nie można go wywołać w blokowych obiektach blob. Wywołanie metody z nazwą obiektu blob, która obecnie nie istnieje, zwraca błąd Put Page BlobNotFound (kod stanu HTTP 404 — nie znaleziono).

Aby utworzyć nowy stronicowy obiekt blob, wywołaj wywołanie put blob i określ typ obiektu blob do utworzenia jako stronicowy obiekt blob. Stronicowy obiekt blob może mieć rozmiar do 8 TiB.

Jeśli obiekt blob ma aktywną dzierżawę, klient musi określić prawidłowy identyfikator dzierżawy w żądaniu, aby napisać stronę.

Operacje aktualizacji strony

Wywołanie Put Page z Update opcją wykonuje zapis w miejscu dla określonego stronicowego obiektu blob. Każda zawartość na określonej stronie jest zastępowana aktualizacją.

Ważne

Jeśli serwer zostanie ugodowy lub połączenie zostanie zamknięte podczas procesu , strona może lub Put Page nie została zaktualizowana. W związku z tym należy kontynuować ponawianie próby aktualizacji do momentu otrzymania odpowiedzi wskazującej powodzenie.

Każdy zakres stron przesłanych za pomocą operacji aktualizacji może mieć rozmiar do Put Page 4 MiB. Zakres początku i końca strony musi być wyrównany do granic 512-bajtowych. Jeśli spróbujemy przekazać zakres stron większy niż 4 MB, usługa zwróci kod stanu 413 (Zbyt duża jednostka żądania).

Operacje wyczyść stronę

Wywołanie Put Page funkcji z Clear opcją zwalnia miejsce do magazynowania używane przez określoną stronę. Strony, które zostały wyczyszone, nie są już śledzone jako część stronicowego obiektu blob.

Strony, które zostały wyczyszczony, nie są już naliczane opłaty za konto magazynu, ponieważ ich zasoby magazynu zostały zwolnione. Jedynym wyjątkiem od tej reguły jest to, że istnieją migawki stronicowego obiektu blob; Jeśli te same strony nie istnieją już jako część źródłowego obiektu blob, opłaty są naliczane na stronach w migawkach.

Zarządzanie problemami ze współbieżnością

Obiekt Blob service sekwencyjnie obsługuje współbieżne operacje zapisu na nakładających się stronach: ostatnia strona przetworzona przez usługę określa zawartość obiektu blob. W związku z tym, aby zapewnić integralność zawartości obiektu blob, klient powinien obsługiwać zapis na nakładających się stronach przy użyciu co najmniej jednej z następujących metod:

  • Możesz sprawdzić wartość nagłówka odpowiedzi dla każdego Last-Modified pomyślnego wywołania . Put Page Kolejność odpowiedzi zwróconych przez Blob service niekoniecznie odpowiada kolejności ich wykonania przez usługę. Jednak wartość zawsze wskazuje kolejność przetwarzania żądań Last-Modified przez usługę.

  • Aktualizacje można przeprowadzać warunkowo na podstawie tagu ETag obiektu blob lub czasu ostatniej modyfikacji przy użyciu optymistycznej współbieżności. To podejście sprawdza się dobrze, jeśli liczba jednoczesnych zapisu jest stosunkowo mała. W tym celu użyj nagłówków żądań warunkowych If-Match If-None-Match , , i If-Modified-Since If-Unmodified-Since .

  • Możesz wywołać dzierżawę obiektu blob, aby zablokować obiekt blob przed innymi zapisami przez jedną minutę lub dłużej, jeśli dzierżawa zostanie odnowiona.

  • Możesz użyć numeru sekwencji obiektu blob, aby upewnić się, że ponawianie próby żądania, dla którego nie ma odpowiedzi, nie spowoduje równoczesnych aktualizacji. Takie podejście może być najlepsze w przypadku klientów wymagających wysokiej przepływności na potrzeby zapisu stron. Został on szczegółowo opisany w poniższej sekcji.

Ponawianie żądań przy użyciu numeru sekwencji stronicowych obiektów blob

Gdy wywołanie do przekrój czasu lub nie zwraca odpowiedzi, nie ma sposobu, aby dowiedzieć się, czy Put Page żądanie zakończyło się pomyślnie. W związku z tym należy ponowić próbę żądania, ale ze względu na rozproszony charakter usług Azure Storage istnieje możliwość, że oryginalne żądanie może zostać przetworzone po zakończeniu ponownego żądania. Opóźnione oryginalne żądanie może zastąpić inne aktualizacje i spowodować nieoczekiwany wynik. Następująca sekwencja ilustruje, jak to może się zdarzyć:

  1. Żądanie zapisu wartości "X" na stronie 0 przecięło się lub Put Page nie zwraca odpowiedzi.

  2. Ponowne żądanie zapisu wartości "X" na stronie 0 zakończy się powodzeniem.

  3. Żądanie zapisu wartości "Y" na stronie 0 zakończy się pomyślnie.

  4. Oryginalne żądanie powiedzie się, zapisuj wartość "X" na stronie 0.

  5. Odczytywanie strony 0 zwraca wartość "X", gdy klient w tym momencie oczekiwał wartości "Y".

Ten rodzaj konfliktu może wystąpić, gdy oryginalne żądanie nie zwraca kodu stanu z wartości od 100 do 499 lub 503 (Serwer zajęty). Jeśli zostanie zwrócony jeden z tych kodów stanu, możesz mieć pewność, czy żądanie zakończyło się powodzeniem, czy niepowodzeniem. Jeśli jednak usługa zwraca kod stanu spoza tego zakresu, nie ma możliwości, aby poznać stan oryginalnego żądania.

Aby zapobiec temu konfliktowi, możesz użyć numeru sekwencji stronicowego obiektu blob, aby upewnić się, że po ponowieniem próby żądania oryginalne żądanie nie powiedzie się. W tym celu należy zwiększyć numer sekwencji przed ponowieniem próby oryginalnego żądania. Następnie można użyć nagłówków numeru sekwencji warunkowej, aby upewnić się, że żądanie zakończy się niepowodzeniem, jeśli jego numer sekwencji nie pasuje do oczekiwanego numeru sekwencji. Następująca sekwencja ilustruje to podejście:

  1. Klient tworzy stronicowy obiekt blob za pomocą put blob i ustawia jego numer sekwencji na 0.

  2. Żądanie zapisu wartości "X" na stronie 0 z nagłówkiem ustawionym na przekrój czasu lub Put Page if-sequence-number-lt nie zwraca 1 odpowiedzi.

  3. Klient wywołuje ustawienie właściwości obiektu blob, aby zaktualizować numer sekwencji do 1.

  4. Ponoszone żądanie zapisu wartości "X" na stronie 0 z if-sequence-number-lt ustawionym na 2 powodzenie.

  5. Żądanie zapisu wartości "Y" na stronie 0 z if-sequence-number-lt ustawionym na 2 powodzenie.

  6. Oryginalne żądanie jest ostatecznie przetwarzane, ale kończy się niepowodzeniem, ponieważ określa warunek, że numer sekwencji musi być mniejszy niż 1 (oznacza to, że nagłówek ma if-sequence-num-lt wartość 1 ). Błąd to SequenceNumberConditionNotMet (kod stanu HTTP 412 — niepowodzenie warunku wstępnego).

  7. Odczytywanie strony 0 zwraca oczekiwaną wartość "Y".

Zobacz też

Autoryzowanie żądań do usługi Azure Storage
Kody stanu i błędów
Ustawianie limitów czasu dla operacji usługi Blob Service