Ошибка предварительной проверки Microsoft Graph CORS при загрузке файла - PullRequest
0 голосов
/ 13 июля 2020

Контекст: Я пытаюсь загрузить файлы в буфер для приложения AngularJS, чтобы переслать файл на бэкэнд для хранения на сервере (бэкэнд не находится под моим контролем), поэтому мне нужно получить данные файла в Blob, который затем загружает мои собственные серверы.

Проблема: Microsoft graph дает мне свое рекомендованное свойство @microsoft.graph.downloadUrl в файле JSON, которое извлекает список всех файлов в текущей выбранной папке. Когда я использую его для загрузки самого файла, я получаю Access to XMLHttpRequest at [the URL from @microsft.graph.downloadUrl] from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Мой код:

const req = {
  method: "GET",
  url: file.item.downloadLink, // @microsoft.graph.downloadUrl
  headers: {
    Authorization: `Bearer ${this.token}`
  },
  eventHandlers: getEventUploadEvenHandlers(file), // update download progress bar
  responseType: "blob"
};
const ret = await this.$http(req);

Мои исследования: Я просматривал эту статью с 5 лет go: https://github.com/microsoftgraph/microsoft-graph-docs/issues/43 Я прочитал всю статью о CORS и файлах здесь: https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/working-with-cors?view=odsp-graph-online Конечно, я прочитал документацию: https://docs.microsoft.com/en-us/graph/api/driveitem-get-content?view=graph-rest-1.0&tabs=http

Ничего не дало мне ответа на вопрос, почему проблема сохраняется. Если у вас есть опыт решения этой проблемы или вы заметите что-то, что, по вашему мнению, я пропустил, я был бы очень благодарен.

Спасибо за любую помощь

1 Ответ

1 голос
/ 14 июля 2020

Так что, по сути, весь мой подход был неправильным. Я сделал вывод из других облачных сервисов, что Microsoft Graph вернет JSON с данными файла. MICROSOFT ВОЗВРАЩАЕТ САМ ФАЙЛ Поэтому fetch или очень простого запроса без каких-либо заголовков достаточно, чтобы получить файл, а затем с помощью .blob() или responseType: 'blob' вы получите большой двоичный объект из ответа.

(await fetch([@microsoft.graph.downloadUrl])).blob() // returns Blob promise
...