Append Block

Der Append Block Vorgang committet einen neuen Datenblock an das Ende eines vorhandenen Anfügeblobs.

Der Append Block Vorgang ist nur zulässig, wenn das Blob mit x-ms-blob-type auf festgelegt AppendBlobwurde. Append Block wird nur ab Version 2015-02-21 unterstützt.

Anforderung

Sie können die Append Block Anforderung wie folgt erstellen. HTTPS wird empfohlen. Ersetzen Sie myaccount durch den Namen Ihres Speicherkontos.

PUT-Methodenanforderungs-URI HTTP-Version
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=appendblock HTTP/1.1

Wenn Sie eine Anforderung an den emulierten Speicherdienst stellen, geben Sie den Emulatorhostnamen und Azure Blob Storage Port als 127.0.0.1:10000an, gefolgt vom Namen des emulierten Speicherkontos.

PUT-Methodenanforderungs-URI HTTP-Version
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=appendblock HTTP/1.1

Weitere Informationen finden Sie unter Verwenden des Azurite-Emulators für lokale Azure Storage-Entwicklung.

URI-Parameter

Parameter BESCHREIBUNG
timeout Optional. Der timeout-Parameter wird in Sekunden angegeben. Weitere Informationen finden Sie unter Festlegen von Timeouts für Azure Blob Storage Vorgänge.

Anforderungsheader

In der folgenden Tabelle werden erforderliche und optionale Anforderungsheader beschrieben.

Anforderungsheader BESCHREIBUNG
Authorization Erforderlich. Gibt das Autorisierungsschema, den Kontonamen und die Signatur an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage .
Date oder x-ms-date Erforderlich. Gibt die koordinierte Weltzeit (Coordinated Universal Time, UTC) für die Anforderung an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage.
x-ms-version Erforderlich für alle autorisierten Anforderungen. Gibt die Version des für die Anforderung zu verwendenden Vorgangs an. Weitere Informationen finden Sie unter Versionsverwaltung für die Azure-Speicherdienste.
Content-Length Erforderlich. Die Länge des Blockinhalts in Bytes. Die Blockgröße muss für Version 2022-11-02 und höher kleiner als 100 MiB (Vorschau) sein. Einschränkungen in älteren Versionen finden Sie im Abschnitt Hinweise .

Wenn die Länge nicht angegeben ist, tritt bei dem Vorgang ein Fehler mit dem Statuscode 411 (Länge erforderlich) auf.
Content-MD5 Optional. Ein MD5-Hash des Blockinhalts. Mithilfe des Hashs wird die Integrität des Blocks während der Übertragung überprüft. Bei Angabe dieses Headers vergleicht der Speicherdienst den Hash des eingegangenen Inhalts mit diesem Headerwert.

Beachten Sie, dass dieser MD5-Hash nicht im Blob gespeichert wird.

Wenn die beiden Hashes nicht übereinstimmen, schlägt der Vorgang mit dem Fehlercode 400 (Ungültige Anforderung) fehl.
x-ms-content-crc64 Optional. Ein CRC64-Hash des Anfügeblockinhalts. Dieser Hash wird verwendet, um die Integrität des Anfügeblocks während des Transports zu überprüfen. Bei Angabe dieses Headers vergleicht der Speicherdienst den Hash des eingegangenen Inhalts mit diesem Headerwert.

Beachten Sie, dass dieser CRC64-Hash nicht im Blob gespeichert wird.

Wenn die beiden Hashes nicht übereinstimmen, schlägt der Vorgang mit dem Fehlercode 400 (Ungültige Anforderung) fehl.

Wenn sowohl - x-ms-content-crc64 als auch Content-MD5 -Header vorhanden sind, schlägt die Anforderung mit dem Fehlercode 400 fehl.

Dieser Header wird in Versionen 2019-02-02 oder höher unterstützt.
x-ms-encryption-scope Optional. Gibt den Verschlüsselungsbereich an, der zum Verschlüsseln des Anforderungsinhalts verwendet werden soll. Dieser Header wird in Versionen 2019-02-02 oder höher unterstützt.
x-ms-lease-id:<ID> Erforderlich, wenn das BLOB über eine aktive Lease verfügt. Um diesen Vorgang für ein BLOB mit einer aktiven Lease auszuführen, geben Sie die gültige Lease-ID für diesen Header an.
x-ms-client-request-id Optional. Stellt einen vom Client generierten, undurchsichtigen Wert mit einem Zeichenlimit von 1 Kibibyte (KiB) bereit, der in den Protokollen aufgezeichnet wird, wenn die Protokollierung konfiguriert ist. Es wird dringend empfohlen, diesen Header zu verwenden, um clientseitige Aktivitäten mit Anforderungen zu korrelieren, die der Server empfängt. Weitere Informationen finden Sie unter Überwachen Azure Blob Storage.
x-ms-blob-condition-maxsize Optionaler bedingter Header. Gibt die maximale Länge in Bytes an, die für das Anfügeblob zulässig ist. Wenn der Append Block Vorgang bewirkt, dass das Blob diesen Grenzwert überschreitet oder die Blobgröße bereits größer als der in diesem Header angegebene Wert ist, schlägt die Anforderung mit dem Fehlercode 412 (Vorbedingung fehlgeschlagen) fehl.
x-ms-blob-condition-appendpos Optionaler bedingter Header, der nur für den Append Block Vorgang verwendet wird. Eine Zahl gibt den zu vergleichenden Byteoffset an. Append Block ist nur erfolgreich, wenn die Anfügeposition gleich dieser Zahl ist. Wenn dies nicht der Fall ist, schlägt die Anforderung mit dem Fehlercode 412 (Vorbedingungsfehler) fehl.

Dieser Vorgang unterstützt die Verwendung zusätzlicher bedingter Header, um sicherzustellen, dass die API nur erfolgreich ist, wenn eine angegebene Bedingung erfüllt ist. Weitere Informationen finden Sie unter Angeben von bedingten Headern für Azure Blob Storage Vorgänge.

Anforderungsheader (vom Kunden bereitgestellte Verschlüsselungsschlüssel)

Ab Version 2019-02-02 können Sie die folgenden Header für die Anforderung angeben, um ein Blob mit einem vom Kunden bereitgestellten Schlüssel zu verschlüsseln. Die Verschlüsselung mit einem vom Kunden bereitgestellten Schlüssel (und dem entsprechenden Satz von Headern) ist optional.

Anforderungsheader BESCHREIBUNG
x-ms-encryption-key Erforderlich. Der Base64-codierte AES-256-Verschlüsselungsschlüssel.
x-ms-encryption-key-sha256 Erforderlich. Der Base64-codierte SHA256-Hash des Verschlüsselungsschlüssels.
x-ms-encryption-algorithm: AES256 Erforderlich. Gibt den Algorithmus an, der für die Verschlüsselung verwendet werden soll. Der Wert dieses Headers muss auf AES256 festgelegt sein.

Anforderungstext

Der Anforderungstext enthält den Inhalt des Blocks.

Beispiel für eine Anforderung

Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=appendblock  HTTP/1.1  
  
Request Headers:  
x-ms-version: 2015-02-21  
x-ms-date: <date>  
x-ms-blob-condition-appendpos: 2097152  
x-ms-blob-condition-maxsize: 4194304  
Authorization: SharedKey myaccount:J4ma1VuFnlJ7yfk/Gu1GxzbfdJloYmBPWlfhZ/xn7GI=  
Content-Length: 1048  
If-Match: "0x8CB172A360EC34B"  
  

Antwort

Die Antwort enthält den HTTP-Statuscode und einen Satz von Antwortheadern.

Statuscode

Bei einem erfolgreichen Vorgang wird der Statuscode 201 (Erstellt) zurückgegeben.

Informationen zu status Codes finden Sie unter Status- und Fehlercodes.

Antwortheader

Die Antwort für diesen Vorgang umfasst die folgenden Header. Die Antwort kann außerdem weitere HTTP-Standardheader enthalten. Alle Standardheader entsprechen der HTTP/1.1-Protokollspezifikation.

Antwortheader BESCHREIBUNG
ETag Enthält ETag einen Wert in Anführungszeichen. Der Client kann den Wert verwenden, um bedingte PUT Vorgänge mithilfe des Anforderungsheaders If-Match auszuführen.
Last-Modified Das Datum und die Uhrzeit der letzten Änderung des Blobs. Das Datumsformat entspricht RFC 1123. Weitere Informationen finden Sie unter Darstellung von Datums-Uhrzeit-Werten in Headern.

Jeder Schreibvorgang für das Blob (einschließlich Aktualisierungen der Metadaten oder Eigenschaften des Blobs) ändert den Zeitpunkt der letzten Änderung des Blobs.
Content-MD5 Dieser Header wird zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird von Blob Storage berechnet. Es ist nicht unbedingt derselbe Wert, der in den Anforderungsheadern angegeben ist. Für Versionen 2019-02-02 oder höher wird dieser Header nur zurückgegeben, wenn die Anforderung über diesen Header verfügt.
x-ms-content-crc64 Für Versionen 2019-02-02 oder höher wird dieser Header zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird von Blob Storage berechnet. Es ist nicht unbedingt derselbe Wert, der in den Anforderungsheadern angegeben ist.

Dieser Header wird zurückgegeben, wenn der Content-md5 Header in der Anforderung nicht vorhanden ist.
x-ms-request-id Dieser Header identifiziert eindeutig die Anforderung, die gestellt wurde, und kann für die Problembehandlung der Anforderung verwendet werden.
x-ms-version Gibt die Version von Blob Storage an, die zum Ausführen der Anforderung verwendet wird. Dieser Header wird für Anforderungen zurückgegeben, die für Version 2009-09-19 und höher erfolgen.
Date Ein UTC-Datums-/Uhrzeitwert, der die Uhrzeit angibt, zu der die Antwort initiiert wurde. Der Dienst generiert diesen Wert.
x-ms-blob-append-offset Dieser Antwortheader wird nur für Anfügevorgänge zurückgegeben. Es gibt den Offset zurück, bei dem der Block in Bytes committet wurde.
x-ms-blob-committed-block-count Die Anzahl der committeten Blöcke, die im Blob vorhanden sind. Damit können Sie steuern, wie viele weitere Anfügevorgänge ausgeführt werden können.
x-ms-request-server-encrypted: true/false Version 2015-12-11 oder höher. Der Wert dieses Headers wird auf true festgelegt, wenn der Inhalt der Anforderung mithilfe des angegebenen Algorithmus erfolgreich verschlüsselt wurde. Andernfalls wird der Wert auf false festgelegt.
x-ms-encryption-key-sha256 Version 2019-02-02 oder höher. Dieser Header wird zurückgegeben, wenn die Anforderung einen vom Kunden bereitgestellten Schlüssel für die Verschlüsselung verwendet hat. Der Client kann dann sicherstellen, dass der Inhalt der Anforderung mithilfe des bereitgestellten Schlüssels erfolgreich verschlüsselt wurde.
x-ms-encryption-scope Version 2019-02-02 oder höher. Dieser Header wird zurückgegeben, wenn die Anforderung einen Verschlüsselungsbereich verwendet hat. Der Client kann dann mithilfe des Verschlüsselungsbereichs sicherstellen, dass der Inhalt der Anforderung erfolgreich verschlüsselt wurde.
x-ms-client-request-id Sie können diesen Header verwenden, um Probleme mit Anforderungen und entsprechenden Antworten zu beheben. Der Wert dieses Headers ist gleich dem Wert des x-ms-client-request-id Headers, wenn er in der Anforderung vorhanden ist. Der Wert ist höchstens 1024 sichtbare ASCII-Zeichen. Wenn der x-ms-client-request-id Header in der Anforderung nicht vorhanden ist, ist dieser Header in der Antwort nicht vorhanden.

Beispiel für eine Antwort

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
Transfer-Encoding: chunked  
x-ms-content-crc64: 77uWZTolTHU  
Date: <date>  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-blob-append-offset: 2097152  
x-ms-blob-committed–block-count: 1000  
  

Authorization

Beim Aufrufen eines Datenzugriffsvorgangs in Azure Storage ist eine Autorisierung erforderlich. Sie können den Append Block Vorgang wie unten beschrieben autorisieren.

Wichtig

Microsoft empfiehlt die Verwendung Microsoft Entra ID mit verwalteten Identitäten, um Anforderungen an Azure Storage zu autorisieren. Microsoft Entra ID bietet im Vergleich zur Autorisierung mit gemeinsam genutzten Schlüsseln überlegene Sicherheit und Benutzerfreundlichkeit.

Azure Storage unterstützt die Verwendung von Microsoft Entra ID zum Autorisieren von Anforderungen an Blobdaten. Mit Microsoft Entra ID können Sie die rollenbasierte Zugriffssteuerung (Azure RBAC) von Azure verwenden, um einem Sicherheitsprinzipal Berechtigungen zu erteilen. Der Sicherheitsprinzipal kann ein Benutzer, eine Gruppe, ein Anwendungsdienstprinzipal oder eine verwaltete Azure-Identität sein. Der Sicherheitsprinzipal wird von Microsoft Entra ID authentifiziert, um ein OAuth 2.0-Token zurückzugeben. Das Token kann anschließend zum Autorisieren einer Anforderung an den Blob-Dienst verwendet werden.

Weitere Informationen zur Autorisierung mit Microsoft Entra ID finden Sie unter Autorisieren des Zugriffs auf Blobs mit Microsoft Entra ID.

Berechtigungen

Nachfolgend sind die RBAC-Aktion aufgeführt, die für einen Microsoft Entra Benutzer, Gruppe, verwaltete Identität oder Dienstprinzipal erforderlich ist, um den Append Block Vorgang aufzurufen, und die integrierte Azure RBAC-Rolle mit den geringsten Berechtigungen, die diese Aktion enthält:

Weitere Informationen zum Zuweisen von Rollen mithilfe von Azure RBAC finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.

Hinweise

Append Block lädt einen Block an das Ende eines vorhandenen Anfügeblobs hoch. Der Datenblock ist sofort verfügbar, nachdem der Aufruf auf dem Server erfolgreich war. Für jedes Anfügeblob sind maximal 50.000 Anfügevorgänge zulässig. Jeder Block kann eine andere Größe aufweisen.

In der folgenden Tabelle werden die maximal zulässigen Block- und Blobgrößen nach Dienstversion beschrieben:

Dienstversion Maximale Blockgröße (über Append Block) Maximale Blobgröße
Version 2022-11-02 und höher 100 MiB (Vorschau) Ca. 4,75 TiB (100 MiB × 50.000 Blöcke)
Versionen vor 02.11.2022 4 MiB Ca. 195 Gibibyte (GiB) (4 MiB × 50.000 Blöcke)

Append Block ist nur erfolgreich, wenn das Blob bereits vorhanden ist.

Blobs, die mit Append Block hochgeladen werden, machen keine Block-IDs verfügbar. Sie können get block list nicht für ein Anfügeblob aufrufen. Dies führt zu einem Fehler.

Sie können die folgenden optionalen, bedingten Header für die Anforderung angeben:

  • x-ms-blob-condition-appendpos: Sie können diesen Header auf einen Byteoffset festlegen, bei dem der Client erwartet, dass er den Block anfügen soll. Die Anforderung ist nur erfolgreich, wenn der aktuelle Offset mit dem vom Client angegebenen übereinstimmt. Andernfalls schlägt die Anforderung mit dem Fehlercode 412 (Vorbedingungsfehler) fehl.

    Clients, die einen einzelnen Writer verwenden, können diesen Header verwenden, um zu bestimmen, ob ein Append Block Vorgang trotz eines Netzwerkfehlers erfolgreich war.

  • x-ms-blob-condition-maxsize: Clients können diesen Header verwenden, um sicherzustellen, dass Anfügevorgänge die Blobgröße nicht über die erwartete maximale Größe in Bytes hinaus erhöhen. Wenn die Bedingung fehlschlägt, schlägt die Anforderung mit dem Fehlercode 412 (Vorbedingung fehlgeschlagen) fehl.

Wenn Sie versuchen, einen Block hochzuladen, der größer als die zulässige Größe ist, gibt der Dienst den Fehlercode 413 (Request Entity Too Large) zurück. Der Dienst gibt in der Antwort zudem weitere Informationen zum Fehler zurück, einschließlich der maximal zulässigen Blockgröße in Bytes. Wenn Sie versuchen, mehr als 50.000 Blöcke hochzuladen, gibt der Dienst den Fehlercode 409 (Konflikt) zurück.

Wenn das BLOB über eine aktive Lease verfügt, muss der Client zum Schreiben eines Blocks in das BLOB in der Anforderung eine gültige Lease-ID angeben. Wenn der Client keine Lease-ID oder eine ungültige Lease-ID angibt, gibt Blob Storage den Fehlercode 412 (Vorbedingung fehlgeschlagen) zurück. Wenn der Client eine Lease-ID angibt, das Blob jedoch keine aktive Lease aufweist, gibt Blob Storage auch den Fehlercode 412 zurück.

Wenn Sie für ein vorhandenes Blockblob oder Seitenblob aufrufen Append Block , gibt der Dienst einen Konfliktfehler zurück. Wenn Sie für ein nicht vorhandenes Blob aufrufen Append Block , gibt der Dienst ebenfalls einen Fehler zurück.

Vermeiden von doppelten oder verzögerten Anfügevorgängen

In einem Szenario mit einem einzelnen Writer kann der Client doppelte Anfügevorgänge oder verzögerte Schreibvorgänge vermeiden, indem er den *x-ms-blob-condition-appendpos bedingten Header verwendet, um den aktuellen Offset zu überprüfen. Der Client kann auch Duplikate oder Verzögerungen vermeiden, indem er die ETag bedingt überprüft, indem er verwendet If-Match.

In einem Szenario mit mehreren Writern kann jeder Client bedingte Header verwenden, aber dies ist möglicherweise nicht optimal für die Leistung. Für den höchsten gleichzeitigen Anfügedurchsatz sollten Anwendungen redundante und verzögerte Anfügevorgänge auf der Anwendungsschicht verarbeiten. Beispielsweise kann die Anwendung den angefügten Daten Epochen oder Sequenznummern hinzufügen.

Abrechnung

Preisanforderungen können von Clients stammen, die Blob Storage-APIs verwenden, entweder direkt über die Blob Storage-REST-API oder aus einer Azure Storage-Clientbibliothek. Für diese Anforderungen fallen Gebühren pro Transaktion an. Die Art der Transaktion wirkt sich auf die Abrechnung des Kontos aus. Beispielsweise werden Lesetransaktionen einer anderen Abrechnungskategorie zugeordnet als Schreibtransaktionen. Die folgende Tabelle zeigt die Abrechnungskategorie für Append Block Anforderungen basierend auf dem Speicherkontotyp:

Vorgang Speicherkontotyp Abrechnungskategorie
Append Block Premium, Blockblob
Standard „Allgemein v2“
Standard „Allgemein v1“
Schreibvorgänge

Anfügeblöcke unterstützen das Tiering auf Objektebene nicht, schließen aber ihre Zugriffsebene von der Standardeinstellung für die Kontozugriffsebene ab und werden entsprechend in Rechnung gestellt. Weitere Informationen zur Einstellung der Standardkontoebene finden Sie unter Zugriffsebenen für Blobdaten – Azure Storage.

Informationen zu den Preisen für die angegebene Abrechnungskategorie finden Sie unter Azure Blob Storage Preise.