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 respostaPUT
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 respostaPOST
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 PUT
operaçã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