Colocar Bloco a Partir do URL

A Put Block From URL operação cria um novo bloco a ser consolidado como parte de um blob onde os conteúdos são lidos a partir de um URL. Esta API está disponível a partir da versão 2018-03-28.

Pedir

O Put Block From URL pedido pode ser construído da seguinte forma. É recomendado HTTPS. Substitua myaccount pelo nome da sua conta de armazenamento:

PUT Method Request URI Versão HTTP
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=block&blockid=id HTTP/1.1

URI do Serviço de Armazenamento Emulado

Ao fazer um pedido relativamente ao serviço de armazenamento emulado, especifique o nome do anfitrião do emulador e a porta do serviço Blob como 127.0.0.1:10000, seguido do nome da conta de armazenamento emulada:

PUT Method Request URI Versão HTTP
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=block&blockid=id HTTP/1.1

Para obter mais informações, veja Using the Azure Storage Emulator for Development and Testing (Utilizar o Emulador de Armazenamento do Azure para Desenvolvimento e Teste).

Parâmetros do URI

Parâmetro Description
blockid Obrigatório. Um valor de cadeia Base64 válido que identifica o bloco. Antes da codificação, a cadeia tem de ter um tamanho inferior ou igual a 64 bytes.

Para um determinado blob, o comprimento do valor especificado para o blockid parâmetro tem de ser o mesmo tamanho para cada bloco.

Tenha em atenção que a cadeia Base64 tem de ter codificação de URL.
timeout Opcional. O timeout parâmetro é expresso em segundos. Para obter mais informações, veja Setting Timeouts for Blob Service Operations (Definir Tempos Limite para Operações do Serviço Blob).

Cabeçalhos de Pedido

A tabela seguinte descreve os cabeçalhos de pedido obrigatórios e opcionais.

Cabeçalho do Pedido Description
Authorization Obrigatório. Especifica o esquema de autorização, o nome da conta e a assinatura. Veja Autorizar pedidos para o Armazenamento do Azure para obter mais informações.
Date ou x-ms-date Obrigatório. Especifica a Hora Universal Coordenada (UTC) do pedido. Para obter mais informações, veja Autorizar pedidos para o Armazenamento do Azure.
x-ms-version Necessário para todos os pedidos autorizados. Especifica a versão da operação a utilizar para este pedido. Para obter mais informações, veja Controlo de versões dos Serviços de Armazenamento do Azure. Para o URL Put Block From, a versão tem de ser 2018-03-28 ou mais recente.
Content-Length Obrigatório. Especifica o número de bytes que estão a ser transmitidos no corpo do pedido. O valor deste cabeçalho tem de ser definido como zero. Quando o comprimento não for zero, a operação falhará com o código de estado 400 (Pedido Incorreto).
x-ms-copy-source:name Obrigatório. Especifica o URL do blob de origem. O valor pode ser um URL de até 2 KiB de comprimento que especifica um blob. O valor deve ser codificado com URL, tal como apareceria num URI de pedido. O blob de origem tem de ser público ou tem de ser autorizado através de uma assinatura de acesso partilhado. Se o blob de origem for público, não é necessária autorização para efetuar a operação. Eis alguns exemplos de URLs de objetos de origem:

- https://myaccount.blob.core.windows.net/mycontainer/myblob
- https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
- https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime>
x-ms-copy-source-authorization: <scheme> <signature> Opcional. Especifica o esquema de autorização e a assinatura da origem de cópia. Para obter mais informações, veja Autorizar pedidos para o Armazenamento do Azure.
Apenas o portador do esquema é suportado para o Azure Active Directory.
Este cabeçalho é suportado nas versões 2020-10-02 e posteriores.
x-ms-source-range Opcional. Carrega apenas os bytes do blob no URL de origem no intervalo especificado. Se isto não for especificado, todo o conteúdo do blob de origem é carregado como um único bloco. Veja Especificar o Cabeçalho do Intervalo para Operações do Serviço Blob para obter mais informações.
x-ms-source-content-md5 Opcional. Um Hash MD5 do conteúdo do bloco do URI. Este Hash é utilizado para verificar a integridade do bloco durante o transporte dos dados do URI. Quando este cabeçalho é especificado, o serviço de armazenamento compara o hash do conteúdo que chegou da fonte de cópia com este valor do cabeçalho.

Note que este hash md5 não está armazenado com a bolha.

Se os dois hashes não corresponderem, a operação falhará com o código de erro 400 (Pedido Incorreto).
x-ms-source-content-crc64 Opcional. Um Hash CRC64 do conteúdo do bloco do URI. Este Hash é utilizado para verificar a integridade do bloco durante o transporte dos dados do URI. Quando este cabeçalho é especificado, o serviço de armazenamento compara o Hash do conteúdo que chegou da fonte de cópia com este valor do cabeçalho.

Note que este Hash CRC64 não é armazenado com a bolha.

Se os dois hashes não corresponderem, a operação falhará com o código de erro 400 (Pedido Incorreto).

Se os cabeçalhos x-ms-source-content-md5 e x-ms-source-content-crc64 estiverem presentes, o pedido falhará com um 400 (Pedido Incorreto).

Este cabeçalho é suportado nas versões 2019-02-02 ou posterior.
x-ms-encryption-scope Opcional. Indica o âmbito de encriptação a utilizar para encriptar o conteúdo de origem. Este cabeçalho é suportado nas versões 2019-02-02 ou posterior.
x-ms-lease-id:<ID> Necessário se o blob tiver uma concessão ativa. Para executar esta operação num blob com uma concessão ativa, especifique o ID de concessão válido para este cabeçalho.
x-ms-client-request-id Opcional. Fornece um valor opaco gerado pelo cliente com um limite de carateres de 1 KiB que é registado nos registos de análise quando o registo de análise de armazenamento está ativado. Recomenda-se a utilização deste cabeçalho para correlacionar as atividades do lado do cliente com os pedidos recebidos pelo servidor. Para obter mais informações, veja About Análise de Armazenamento Logging andAzure Logging: Using Logs to Track Storage Requests (Sobre o Registo de Análise de Armazenamento e o Registo do Azure: Utilizar Registos para Controlar Pedidos de Armazenamento).

Cabeçalhos de Pedido (chaves de encriptação fornecidas pelo cliente)

A partir da versão 2019-02-02, podem ser especificados os seguintes cabeçalhos no pedido para encriptar um blob com uma chave fornecida pelo cliente. A encriptação com uma chave fornecida pelo cliente (e o conjunto de cabeçalhos correspondente) é opcional.

Cabeçalho do pedido Description
x-ms-encryption-key Obrigatório. A chave de encriptação AES-256 codificada com Base64.
x-ms-encryption-key-sha256 Obrigatório. O hash SHA256 codificado com Base64 da chave de encriptação.
x-ms-encryption-algorithm: AES256 Obrigatório. Especifica o algoritmo a utilizar para encriptação. O valor deste cabeçalho tem de ser AES256.

Corpo do Pedido

Sem corpo do pedido.

Pedido de Amostra

Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=block&blockid=AAAAAA%3D%3D HTTP/1.1  
  
Request Headers:  
x-ms-version: 2018-03-28  
x-ms-date: Sat, 31 Mar 2018 14:37:35 GMT    
Authorization: SharedKey myaccount:J4ma1VuFnlJ7yfk/Gu1GxzbfdJloYmBPWlfhZ/xn7GI=  
Content-Length: 0
x-ms-copy-source: https://myaccount.blob.core.windows.net/mycontainer/myblob
x-ms-source-range: bytes=0-499

Resposta

A resposta inclui um código de estado HTTP e um conjunto de cabeçalhos de resposta.

Código de Estado

Uma operação bem-sucedida devolve o código de estado 201 (Criado).

Para obter informações sobre códigos de estado, veja Códigos de Estado e Erro.

Cabeçalhos de Resposta

A resposta para esta operação inclui os seguintes cabeçalhos. A resposta também pode incluir cabeçalhos HTTP padrão adicionais. Todos os cabeçalhos padrão estão em conformidade com a especificação do protocolo HTTP/1.1.

Cabeçalho de resposta Descrição
Content-MD5 Este cabeçalho é devolvido para que o cliente possa verificar a integridade do conteúdo da mensagem. O valor deste cabeçalho é calculado pelo serviço Blob; não é necessariamente o mesmo valor especificado nos cabeçalhos do pedido. Para as versões 2019-02-02 ou posterior, este cabeçalho só é devolvido quando o pedido tiver este cabeçalho.
x-ms-content-crc64 Para as versões 2019-02-02 ou posterior, este cabeçalho é devolvido para que o cliente possa verificar a integridade do conteúdo da mensagem. O valor deste cabeçalho é calculado pelo serviço Blob; não é necessariamente o mesmo valor especificado nos cabeçalhos do pedido.

Este cabeçalho é devolvido quando x-ms-source-content-md5 o cabeçalho não está presente no pedido.
x-ms-request-id Este cabeçalho identifica exclusivamente o pedido que foi feito e pode ser utilizado para resolver o pedido. Para obter mais informações, veja Troubleshooting API Operations (Resolver Problemas de Operações de API).
x-ms-version Indica a versão do serviço Blob utilizada para executar o pedido.
Date Um valor de data/hora UTC gerado pelo serviço que indica a hora em que a resposta foi iniciada.
x-ms-request-server-encrypted: true/false Versão 2015-12-11 ou mais recente. O valor deste cabeçalho está definido como true se os conteúdos do bloco forem encriptados com êxito com o algoritmo especificado e false de outra forma.
x-ms-encryption-key-sha256 Versão 2019-02-02 ou mais recente. Este cabeçalho é devolvido se o pedido tiver utilizado uma chave fornecida pelo cliente para encriptação, para que o cliente possa garantir que os conteúdos do pedido são encriptados com êxito com a chave fornecida.
x-ms-encryption-scope Versão 2019-02-02 ou mais recente. Este cabeçalho é devolvido se o pedido tiver utilizado um âmbito de encriptação, para que o cliente possa garantir que os conteúdos do pedido são encriptados com êxito com o âmbito de encriptação.
x-ms-client-request-id Este cabeçalho pode ser utilizado para resolver problemas de pedidos e respostas correspondentes. O valor deste cabeçalho é igual ao valor do x-ms-client-request-id cabeçalho se estiver presente no pedido e o valor for, no máximo, 1024 carateres ASCII visíveis. Se o x-ms-client-request-id cabeçalho não estiver presente no pedido, este cabeçalho não estará presente na resposta.

Resposta de Amostra

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
Transfer-Encoding: chunked  
x-ms-content-crc64: 77uWZTolTHU  
Date: Sat, 31 Mar 2018 23:47:09 GMT  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  

Autorização

Esta operação pode ser chamada pelo proprietário da conta e por qualquer pessoa com uma Assinatura de Acesso Partilhado que tenha permissão para escrever neste blob ou no respetivo contentor.

Observações

Put Block From URL carrega um bloco para inclusão futura num blob de blocos. Um blob de blocos pode incluir um máximo de 50 000 blocos. Cada bloco pode ter um tamanho diferente. O tamanho máximo de um bloco carregado é Put Block From URL de 100 MiB. Para carregar blocos maiores (até 4000 MiB), consulte Colocar Bloco.

Na versão 2020-10-02 e mais recente, a autorização do Azure Active Directory é suportada para a origem da operação de cópia.

Um blob pode ter um máximo de 100 000 blocos não comprometidos em qualquer altura. Se este máximo for excedido, o serviço devolve o código de estado 409 (RequestEntityTooLargeBlockCountExceedsLimit).

A tabela seguinte descreve os tamanhos máximos de blocos e blobs permitidos pela versão do serviço.

Versão do serviço Tamanho máximo do bloco (via Put Block from URL) Tamanho máximo do blob (através de Colocar Lista de Blocos) Tamanho máximo do blob através de uma operação de escrita única (através de Colocar Blob a partir do URL)
Versão 2020-04-08 e posterior 4000 MiB Aproximadamente 190,7 TiB (4000 MiB X 50 000 blocos) 5000 MiB (pré-visualização)
Versões anteriores a 2020-04-08 100 MiB Aproximadamente 4,75 TiB (100 MiB X 50 000 blocos) 256 MiB

Depois de carregar um conjunto de blocos, pode criar ou atualizar o blob no servidor a partir deste conjunto ao chamar a operação Colocar Lista de Blocos . Cada bloco no conjunto é identificado por um ID de bloco exclusivo nesse blob. Os IDs de bloco estão no âmbito de um blob específico, pelo que os blobs diferentes podem ter blocos com os mesmos IDs.

Se chamar Put Block From URL um blob que ainda não existe, é criado um novo blob de blocos com um comprimento de conteúdo de 0. Este blob é enumerado pela List Blobs operação se a opção include=uncommittedblobs for especificada. O bloco ou blocos que carregou não são consolidados até chamar Put Block List o novo blob. Um blob criado desta forma é mantido no servidor durante uma semana; se não tiver adicionado mais blocos ou blocos consolidados ao blob nesse período de tempo, o blob é lixo recolhido.

Um bloco que tenha sido carregado com êxito com a Put Block From URL operação não faz parte de um blob até ser consolidado com Put Block List. Antes Put Block List de ser chamado para consolidar o blob novo ou atualizado, quaisquer chamadas para Obter Blob devolvem os conteúdos do blob sem a inclusão do bloco não comprometido.

Se carregar um bloco que tenha o mesmo ID de bloco que outro bloco que ainda não foi consolidado, o último bloco carregado com esse ID será consolidado na próxima operação com êxito Put Block List .

Depois de Put Block List ser chamado, todos os blocos não comprometidos especificados na lista de blocos são consolidados como parte do novo blob. Todos os blocos não comprometidos que não foram especificados na lista de blocos do blob serão recolhidos e removidos do serviço Blob. Quaisquer blocos não comprometidos também serão recolhidos lixo se não existirem chamadas bem-sucedidas para Put Block From URL ou Put Block List no mesmo blob no prazo de uma semana após a última operação bem sucedida Put Block From URL . Se Colocar Blob for chamado no blob, todos os blocos não comprometidos serão recolhidos.

Se o blob tiver uma concessão ativa, o cliente tem de especificar um ID de concessão válido no pedido para escrever um bloco no blob. Se o cliente não especificar um ID de concessão ou especificar um ID de concessão inválido, o serviço Blob devolve o código de estado 412 (Falha na Pré-condição). Se o cliente especificar um ID de concessão, mas o blob não tiver uma concessão ativa, o serviço Blob também devolve o código de estado 412 (Falha na Pré-condição).

Para um determinado blob, todos os IDs de bloco têm de ter o mesmo comprimento. Se um bloco for carregado com um ID de bloco com um comprimento diferente dos IDs de bloco para quaisquer blocos não comprometidos existentes, o serviço devolve o código de resposta de erro 400 (Pedido Incorreto).

As chamadas Put Block From URL não atualizam a última hora modificada de um blob existente.

Chamar Put Block From URL num blob de página devolve um erro.

Chamar Put Block From URL num blob arquivado irá devolver um erro e no Hot/Cool blob não altera a camada de blobs.

Consulte também