Вложение файлов в задачу Списка дел
С помощью Списка дел API в Microsoft Graph, вы можете вкладывать в задачи Списка дел файлы размером до 25 МБ. В зависимости от размера файла выберите один из двух способов вложения файла:
- Чтобы объединить файлы любого размера, создайте сеанс загрузки и итеративно используйте
PUT
для загрузки диапазонов байтов файла, пока не загрузите весь файл. Заголовок в итоговом успешном откликеPUT
включает URL-адрес с ИД вложения. - Если размер файла меньше 3 МБ, выполните однократное
POST
в свойстве навигации по вложениямзадачи Списка дел; посмотрите, как это сделать для задачи. Успешный откликPOST
включает ИД вложенного файла.
Эта статья иллюстрирует первый подход. Вы научитесь шаг за шагом создавать и использовать сеанс отправки для добавления вложенного файла к задаче.
Шаг 1. Создание сеанса отправки
Создайте сеанс отправки, чтобы вложить файл в задачу Списка дел. Укажите файл во входном параметре attachmentInfo.
После успешной операции возвращается HTTP 201 Created
и новый экземпляр объекта uploadSession, содержащий непрозрачный URL-адрес, который можно использовать в последующих операциях PUT
для отправки частей этого файла. Этот экземпляр uploadSession предоставляет временное место хранения, где байты файла сохраняются до отправки всего файла.
Объект uploadSession в ответе также включает свойство nextExpectedRanges, указывающее, что исходное начальное расположение загрузки должно быть байтом 0
.
Разрешения
Для вызова этого API требуется одно из следующих разрешений. Дополнительные сведения, включая сведения о том, как выбрать разрешения, см. в статье Разрешения.
Тип разрешения | Разрешения (в порядке повышения привилегий) |
---|---|
Делегированные (рабочая или учебная учетная запись) | Tasks.ReadWrite |
Делегированные (личная учетная запись Майкрософт) | Tasks.ReadWrite |
Для приложений | Не поддерживается. |
Пример: создание сеанса отправки для задачи Списка дел
Запрос
В следующем примере показан запрос на создание сеанса отправки.
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
}
}
Отклик
В следующем примере показан ресурс uploadSession, возвращенный для задачи в тексте отклика.
Примечание. Объект отклика, показанный здесь, может быть сокращен для удобочитаемости.
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-"
]
}
Шаг 2. Отправка диапазона байтов файла с помощью сеанса отправки
Чтобы отправить файл или часть файла, добавьте /content
к URL-адресу, возвращенный на шаге 1, в свойстве uploadUrl ресурса uploadSession и сделайте PUT
запрос на добавленный URL-адрес. Можно отправить файл целиком или разделить файл на несколько диапазонов байтов. Каждый диапазон байтов должен быть менее 4 МБ.
Укажите заголовки и текст запроса, как описано в следующих разделах.
Заголовки запросов
Имя | Тип | Описание |
---|---|---|
Авторизация | String | Bearer {token}. Обязательно. Дополнительные сведения о проверке подлинности и авторизации. |
Content-Length | Int32 | Количество байтов, отправляемых в этой операции. Верхний предел числа байтов для каждой операции PUT составляет 4 МБ. Запрос завершится сбоем для всего, что превышает 4 МБ. Обязательный элемент. |
Content-Range | String | Диапазон байтов файла, отправляемого в этой операции, начиная с байта 0, выраженный в формате bytes {start}-{end}/{total} . Обязательный элемент. |
Content-Type | String | Тип MIME. Укажите application/octet-stream . Обязательный элемент. |
Основной текст запроса
Укажите фактические байты вкладываемого файла, находящиеся в диапазоне расположения, указанном в заголовке запроса Content-Range
.
Отклик
Успешная отправка возвращает код отклика HTTP 200 OK
и объект uploadSession. Объект отклика имеет указанные ниже свойства.
- Значение свойства expirationDateTime остается тем же, что было возвращено исходным uploadSession на шаге 1.
-
nextExpectedRanges указывает расположение следующего байта для начала загрузки, например,
"nextExpectedRanges":["2097152"]
. Байты файла необходимо отправлять по порядку.
- Свойство uploadUrl не возвращается явно, так как все операции сеанса загрузки
PUT
используют один и тот же URL-адрес, возвращаемый при создании сеанса (шаг 1).
Пример: первая загрузка в задачу Списка дел
Запрос
Ниже показан пример запроса.
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>
}
Отклик
Следующий пример ответа показывает в свойстве nextExpectedRanges начало следующего диапазона байтов, ожидаемого сервером.
HTTP/1.1 200 OK
Content-type: application/json
{
"ExpirationDateTime":"2022-06-09T10:45:27.4324526Z",
"NextExpectedRanges":["2097152"]
}
Шаг 3. Продолжение отправки диапазонов байтов вплоть до отправки всего файла
После первоначальной отправки на шаге 2 продолжайте отправлять оставшиеся части файла, используя аналогичный запрос PUT
, как описано на шаге 2, до достижения даты и времени окончания срока действия сеанса. Используйте коллекцию nextExpectedRanges, чтобы определить, с чего начать отправку следующего диапазона байтов. Вы можете увидеть несколько диапазонов, указывающих части файла, еще не полученные сервером. Это удобно, когда требуется возобновить прерванную передачу, а клиенту неизвестно состояние службы.
После успешной отправки последнего байта файла операция PUT
возвращает HTTP 201 Created
и заголовок Location
, указывающий URL-адрес вложенного файла. Можно получить ИД вложения по этому URL-адресу и сохранить его для дальнейшего использования.
В следующих примерах покажите, как отправить последний диапазон в файл задачи Списка дел на предыдущих шагах.
Пример: окончательная отправка в задачу Списка дел
Запрос
Ниже показан пример запроса.
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>
}
Отклик
Ниже приведен пример отклика, в котором показан заголовок отклика Location
, из которого можно сохранить идентификатор вложения (AAMkADI5MAAIT3drCAAABEgAQANAqbAe7qaROhYdTnUQwXm0=
) для последующего использования.
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
Альтернатива: отмена сеанса отправки
Если необходимо отменить отправку в любое время до окончания срока действия сеанса отправки, можно использовать тот же самый начальный URL-адрес для удаления сеанса отправки. Успешная операция возвращает код отклика HTTP 204 No Content
.
Пример: отмена сеанса отправки
Запрос
Ниже показан пример запроса.
DELETE https://graph.microsoft.com/beta/users/6f9a2a92-8527-4d64-837e-b5312852f36d/todo/lists/AAMDiFkfh=/tasks/AAMkADliMm=/attachmentSessions/AAMkADliMm=
Отклик
Ниже приводится пример отклика.
HTTP/1.1 204 No content