Adjuntar archivos a una tarea de To Do
Con la API de To Do en Microsoft Graph, puede adjuntar archivos de hasta 25 MB a una todoTask. Según el tamaño del archivo, elija una de las dos formas de adjuntar el archivo:
- Para adjuntar archivos de cualquier tamaño, cree una sesión de carga e itere solicitudes
PUT
para cargar partes del archivo hasta cargarlo entero. El encabezado de la respuestaPUT
final correcta incluye una dirección URL con el ID. de datos adjuntos. - Si el tamaño del archivo es inferior a 3 MB, use el método
POST
una vez en la propiedad de navegación de datos adjuntos de una todoTask; vea cómo hacerlo para una tarea. Si la respuestaPOST
es correcta, incluirá el ID. del archivo adjunto.
En este artículo se muestra el primer enfoque. Aprenderá paso a paso cómo crear y usar una sesión de carga para agregar datos adjuntos de archivo a una tarea.
Paso 1: crear una sesión de carga
Cree una sesión de carga para adjuntar un archivo a una todoTask. Especifique el archivo en el parámetro de entrada attachmentInfo.
Una operación correcta devuelve HTTP 201 Created
y una nueva instancia uploadSession con una dirección URL opaca que se puede usar en operaciones de PUT
posteriores para cargar partes del archivo. La instancia de uploadSession ofrece una ubicación de almacenamiento temporal en la que se guardan los bytes del archivo hasta que se cargue el archivo completo.
El objeto uploadSession en la respuesta también incluye la propiedad nextExpectedRanges, lo que indica que la primera ubicación de carga inicial debe ser el byte 0
.
Permisos
Se requiere uno de los siguientes permisos para llamar a esta API. Para obtener más información, incluido cómo elegir permisos, vea Permisos.
Tipo de permiso | Permisos (de menos a más privilegiados) |
---|---|
Delegado (cuenta profesional o educativa) | Tasks.ReadWrite |
Delegado (cuenta personal de Microsoft) | Tasks.ReadWrite |
Aplicación | No admitida. |
Ejemplo: crear una sesión de carga para una todoTask.
Solicitud
En el ejemplo siguiente se muestra una solicitud para crear una sesión de carga.
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
}
}
Respuesta
En el ejemplo siguiente se muestra el recurso uploadSession devuelto para la tarea en el cuerpo de la respuesta.
Nota: Se puede acortar el objeto de respuesta que se muestra aquí para mejorar la legibilidad.
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-"
]
}
Paso 2: usar la sesión de carga para cargar un rango de bytes del archivo
Para cargar el archivo o una parte del archivo, anexe /content
a la dirección URL devuelta en el paso 1 de la propiedad uploadUrl del recurso uploadSession y realice una PUT
solicitud en la dirección URL anexada. Puede cargar el archivo entero o dividirlo en varios trozos de bytes. Cada intervalo de bytes debe ser inferior a 4 MB.
Especifique los encabezados de solicitud y el cuerpo de la solicitud como se describe en las secciones siguientes.
Encabezados de solicitud
Nombre | Tipo | Descripción |
---|---|---|
Authorization | Cadena | {token} de portador. Obligatorio. Obtenga más información sobre la autenticación y la autorización. |
Content-Length | Int32 | El número de bytes que se están cargando en esta operación. Para mejorar el rendimiento, limite el número máximo de bytes para cada operación PUT a 4 MB. Se producirá un error en la solicitud para cualquier valor superior a 4 MB. Obligatorio. |
Content-Range | Cadena | El rango de bytes basado en 0 del archivo que se carga en esta operación, expresado en formato bytes {start}-{end}/{total} . Obligatorio. |
Content-Type | Cadena | El tipo MIME. Especifique application/octet-stream . Obligatorio. |
Cuerpo de la solicitud
Especifique los bytes reales del archivo que se va a adjuntar y que se encuentran en el rango de la ubicación especificado en el encabezado de solicitud Content-Range
.
Respuesta
Una carga correcta devuelve un código de respuesta HTTP 200 OK
y un objeto uploadSession. Tenga en cuenta lo siguiente en el objeto de respuesta:
- El valor de la propiedad expirationDateTime sigue siendo el mismo que devolvió uploadSession inicialmente en el paso 1.
- El nextExpectedRanges especifica la siguiente ubicación de bytes desde la que se va a empezar a cargar, por ejemplo,
"nextExpectedRanges":["2097152"]
. Debe cargar los bytes de un archivo en orden.
- La propiedad uploadUrl no se devuelve explícitamente, ya que todas las operaciones de
PUT
de una sesión de carga usan la misma dirección URL devuelta al crear la sesión (paso 1).
Ejemplo: cargar primero en la todoTask
Solicitud
En el ejemplo siguiente se muestra la solicitud.
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>
}
Respuesta
A continuación puede ver un ejemplo de la respuesta que muestra el inicio del siguiente intervalo de bytes que espera el servidor en la propiedad nextExpectedRanges.
HTTP/1.1 200 OK
Content-type: application/json
{
"ExpirationDateTime":"2022-06-09T10:45:27.4324526Z",
"NextExpectedRanges":["2097152"]
}
Paso 3: seguir cargando intervalos de bytes hasta que se haya cargado todo el archivo
Después de la carga inicial en el paso 2, siga cargando la parte restante del archivo con una solicitud de PUT
similar, como se describe en el paso 2, antes de que llegue a la fecha y hora de expiración de la sesión. Use la colección nextExpectedRanges para determinar dónde iniciar el siguiente intervalo de bytes que se va a cargar. Es posible que vea varios intervalos especificados, lo que indica las partes del archivo que aún no ha recibido el servidor. Esto resulta útil si necesita reanudar una transferencia que se ha interrumpido y su cliente no está seguro del estado del servicio.
Una vez que el último byte del archivo se ha cargado correctamente, la operación final de PUT
devuelve un código de respuesta HTTP 201 Created
y un encabezado Location
que indica la dirección URL de los datos adjuntos del archivo. Puede obtener el ID. de datos adjuntos desde la URL y guardarlo para usarlo más adelante.
En los ejemplos siguientes se muestra cómo cargar el último intervalo de bytes del archivo en todoTask en los pasos anteriores.
Ejemplo: carga final en todoTask
Solicitud
En el ejemplo siguiente se muestra la solicitud.
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>
}
Respuesta
El siguiente es un ejemplo de la respuesta que muestra un encabezado de respuesta Location
desde el que puede guardar el identificador de datos adjuntos (AAMkADI5MAAIT3drCAAABEgAQANAqbAe7qaROhYdTnUQwXm0=
) para su 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
Paso alternativo: cancelar la sesión de carga
Si tiene que cancelar la carga en cualquier momento antes de que la sesión expire, puede usar la misma URL inicial para eliminar la sesión de carga. Una operación correcta devuelve un código de respuesta HTTP 204 No Content
.
Ejemplo: Cancelar la sesión de carga
Solicitud
En el ejemplo siguiente se muestra la solicitud.
DELETE https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachmentSessions/AAMkADliMm=
Respuesta
En el ejemplo siguiente se muestra la respuesta.
HTTP/1.1 204 No content