Скачивание файлов пользователей

Завершено

Список файлов, которые невозможно скачать, обязательно разочарует пользователей, поэтому нам необходимо добавить функцию скачивания. Вы можете подумать, что у этих файлов будут простые гиперссылки, но помните, что Microsoft 365 — это безопасная среда, поэтому скачивание необходимо защитить. Microsoft Graph предоставляет кратковременный URL-адрес для скачивания, в который встроена защита, но его необходимо немедленно использовать.

При получении списка файлов, вместо того чтобы получать URL-адреса, которые станут недействительными еще до того, как пользователи смогут их выбрать, код запрашивает идентификатор каждого файла. Идентификатор файла обменивается на URL-адрес для скачивания, как только пользователь переходит по ссылке. В качестве напоминания представляем этот вызов снова:

const response = await graphClient
    .api('/me/drive/root/children')
    .select('id,name,folder,package')
    .get();

Когда пользователь переходит по ссылке на файл, событие onClick направляет пользователя в функцию downloadFile(), которая получает кратковременный URL-адрес и немедленно скачивает файл.

async function downloadFile(file) {
  try {
    const response = await graphClient
        .api(`/me/drive/items/${file.id}`)
        .select('@microsoft.graph.downloadUrl')
        .get();
    const downloadUrl = response["@microsoft.graph.downloadUrl"];
    window.open(downloadUrl, "_self");
  } catch (error) {
    console.error(error);
  }
}

Вызов /me/drive/items/<file ID> получает метаданные указанного файла. Обратите внимание на параметр select(), который запрашивает @microsoft.graph.downloadUrl. Это свойство для кратковременного URL-адреса скачивания необходимо запрашивать в явном виде, так как оно не возвращается по умолчанию.

Вызов window.open() с целью _self сообщает браузеру, что необходимо скачать файл, а не открывать его.