Compartilhar via


Anexar arquivos a uma Tarefa Pendente

Usando a API de Tarefas Pendentes no Microsoft Graph, você pode anexar arquivos de até 25 MB a uma Tarefa Pendente. Dependendo do tamanho do arquivo, escolha uma das duas maneiras de anexar o arquivo:

  • Para anexar arquivos de qualquer tamanho, crie uma sessão de upload e use PUT iteradamente para carregar intervalos de bytes do arquivo até que você carregue todo o arquivo. Um cabeçalho na resposta PUT finalizada com êxito inclui uma URL com a ID do anexo.
  • Se o tamanho do arquivo for menor que 3 MB, faça uma única POST na propriedade de navegação dos anexos de uma Tarefa Pendente; veja como fazer isto para uma tarefa. A resposta POST bem-sucedida inclui a ID de anexo do arquivo.

Este artigo ilustra a primeira abordagem. Você aprenderá passo a passo como criar e usar uma sessão de upload para adicionar um arquivo anexo a uma tarefa.

Etapa 1: criar uma sessão de carregamento

Criar uma sessão de upload para anexar para uma Tarefa pendente. Especifique o arquivo no parâmetro de entrada attachmentInfo.

Uma operação bem-sucedida retorna HTTP 201 Created e uma nova instânciauploadSession, que contém uma URL opaca que você pode usar em operações PUT subseqüentes para carregar partes do arquivo. A uploadSession fornece um local de armazenamento temporário onde os bytes do arquivo são salvos até que você tenha carregado o arquivo completo.

O objeto uploadSession na resposta também inclui a propriedade nextExpectedRanges, que indica que a localização inicial de upload deve ser de 0 bytes.

Permissões

Uma das seguintes permissões é necessária para chamar esta API. Para saber mais, incluindo como escolher permissões, confira Permissões.

Tipo de permissão Permissões (da com menos para a com mais privilégios)
Delegado (conta corporativa ou de estudante) Tasks.ReadWrite
Delegado (conta pessoal da Microsoft) Tasks.ReadWrite
Aplicativo Sem suporte.

Exemplo: criar uma sessão de upload para uma Tarefa pendente

Solicitação

O exemplo seguinte mostra um pedido para criar uma sessão de carregamento.

POST https://graph.microsoft.com/beta/me/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachments/createUploadSession
Content-Type: application/json

{
  "attachmentInfo": {
    "attachmentType": "file",
    "name": "flower",
    "size": 3483322
  }
}

Resposta

O seguinte exemplo mostra o recurso uploadSession devolvido para a tarefa no corpo de réplica.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#microsoft.graph.uploadSession",
    "uploadUrl": "https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachmentSessions/AAMkADliMm=",
    "expirationDateTime": "2022-06-09T10:45:27.4324526Z",
    "nextExpectedRanges": [
        "0-"
    ]
}

Etapa 2: usar a sessão de carregamento para carregar um intervalo de bytes do arquivo

Para carregar o ficheiro ou uma parte do ficheiro, acrescente /content ao URL devolvido no passo 1 na propriedade uploadUrl do recurso uploadSession e faça um PUT pedido no URL acrescentado. Você pode carregar todo o arquivo ou dividi-lo em vários intervalos de bytes. Cada intervalo de bytes precisa ser inferior a 4 MB.

Especifique os cabeçalhos de solicitação e o corpo da solicitação, conforme descrito nas seções a seguir.

Cabeçalhos de solicitação

Nome Tipo Descrição
Autorização Cadeia de caracteres {token} de portador. Obrigatório. Saiba mais sobre autenticação e autorização.
Content-Length Int32 O número de bytes sendo carregados nesta operação. O limite superior do número de bytes para cada operação PUT é de 4 MB. A solicitação falhará para qualquer coisa superior a 4 MB. Obrigatório.
Intervalo de conteúdo Cadeia de Caracteres O intervalo de bytes baseado em 0 do arquivo que está sendo carregado nesta operação, expresso no formato bytes {start}-{end}/{total}. Obrigatório.
Content-Type Cadeia de Caracteres O tipo MIME. Especifiqueapplication/octet-stream. Obrigatório.

Corpo da solicitação

Especificar os bytes reais do arquivo a ser anexado, que estão no intervalo de local especificado pelo cabeçalho da solicitaçãoContent-Range.

Resposta

Um upload bem-sucedido devolve um código de resposta HTTP 200 OK e um objeto uploadSession. Observe o seguinte no objeto de resposta:

  • O valor da propriedade expirationDateTime permanece o mesmo que foi devolvido pela uploadSession inicial na etapa 1.
  • O nextExpectedRanges especifica o próximo local do byte para iniciar o carregamento, por exemplo, "nextExpectedRanges":["2097152"]. Você deve carregar os bytes em um arquivo na ordem.
  • A propriedade uploadUrl não é devolvida explicitamente, pois todas as operações PUT de uma sessão de upload usam a mesma URL devolvida quando você cria a sessão (etapa 1).

Exemplo: primeiro upload para a Tarefa pendente

Solicitação

O exemplo a seguir mostra uma solicitação.

PUT https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachmentSessions/AAMkADliMm=/content
Content-Type: application/octet-stream
Content-Length: 2097152
Content-Range: bytes 0-2097151/3483322

{
  <bytes 0-2097151 of the file to be attached, in binary format>
}

Resposta

O seguinte é um exemplo da resposta que mostra na propriedade nextExpectedRanges o início do próximo intervalo de bytes que o servidor espera.

HTTP/1.1 200 OK
Content-type: application/json

{
  "ExpirationDateTime":"2022-06-09T10:45:27.4324526Z",
  "NextExpectedRanges":["2097152"]
}

Etapa 3: continuar carregando intervalos de bytes até que todo o arquivo tenha sido carregado

Após o carregamento inicial na etapa 2, continue a carregar a parte restante do arquivo, usando uma solicitação PUT semelhante, conforme descrito na etapa 2, antes que você atinja a data/hora de vencimento da sessão. Use a coleção nextExpectedRanges para determinar onde iniciar o próximo intervalo de bytes a ser carregado. Você pode ver vários intervalos especificados, indicando as partes do arquivo que o servidor ainda não recebeu. Isso é útil quando você precisa retomar uma transferência que foi interrompida, e seu cliente não tem certeza sobre o estado no serviço.

Quando o último byte do arquivo for carregado com êxito, a PUToperação final devolve um HTTP 201 Created código de resposta final e um Location cabeçalho que indica a URL para o anexo de arquivo. Você pode obter a ID do anexo na URL e salvá-la para uso posterior.

Os seguintes exemplos mostram como carregar o último intervalo de bytes do arquivo para a Tarefa pendente das etapas anteriores.

Exemplo: último upload para a Tarefa pendente

Solicitação

O exemplo a seguir mostra uma solicitação.

PUT https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachmentSessions/AAMkADliMm=/content
Content-Type: application/octet-stream
Content-Length: 1386170
Content-Range: bytes 2097152-3483321/3483322

{
  <bytes 2097152-3483321 of the file to be attached, in binary format>
}

Resposta

O seguinte é um exemplo da resposta que mostra um Location cabeçalho de resposta do qual você pode salvar a ID do anexo (AAMkADI5MAAIT3drCAAABEgAQANAqbAe7qaROhYdTnUQwXm0=) para uso posterior.

HTTP/1.1 201 Created

Location: https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/Attachments/AAMkADI5MAAIT3drCAAABEgAQANAqbAe7qaROhYdTnUQwXm0=
Content-Length: 0

Etapa alternativa: cancelar a sessão de upload

Em qualquer momento antes da sessão de upload expirar, se você tiver que cancelar o upload, você pode usar a mesma URL inicial para excluir a sessão de upload. Uma operação bem-sucedida retorna um código de resposta HTTP 204 No Content.

Exemplo: cancelar a sessão de upload

Solicitação

O exemplo a seguir mostra uma solicitação.

DELETE https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachmentSessions/AAMkADliMm=

Resposta

O exemplo a seguir mostra a resposta.

HTTP/1.1 204 No content