Вам нужно сделать 2 изменения, чтобы получить URL из файла:
1) Вы должны добавить атрибут webViewLink [1] между вашими полями в параметрах поиска:
url.search = new URLSearchParams ({uploadType: 'multipart', поля: 'id, name, kind, webViewLink'});
Этот атрибут является ссылкой для открытия файла в Интернете.
2) Тело ответа, которое вы получаете, является ReadableStream, вам нужно преобразовать его в объект json, которым вы можете манипулировать. Это можно сделать с помощью функции json () [2] для получаемого ответа, который вернет тело ответа, проанализированное для объекта Json, с атрибутами: id, webViewLink и т. Д.
Я настроил и протестировал ваш код и работал, как и ожидалось, показывая URL для вновь созданного файла в сообщении с предупреждением:
let metadata = {
name: excelFileName,
mimeType: "application/vnd.google-apps.spreadsheet",
};
let form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], { type: 'application/json' }));
form.append('file', excelFile);
let url = new URL('https://www.googleapis.com/upload/drive/v3/files');
url.search = new URLSearchParams({ uploadType: 'multipart', fields: 'id,name,kind,webViewLink' });
try {
const res = await fetch(url, {
method: 'POST',
headers: new Headers({ 'Authorization': 'Bearer ' + gapi.auth.getToken().access_token}),
body: form
});
//Convert response to json
const resJson = await res.json();
if (res.ok) {
console.log(gapi);
console.log(res);
console.log(resJson);
alert(`"${excelFileName}" has successfully saved to your google drive!: ` + resJson.webViewLink);
} else {
console.error(`Encounter a problem saving excel file, ${excelFileName}, to google drive:` + res.Json);
}
} catch (ex) {
console.error(`Oops excel file for "${excelFileName}" wasn't saved. ${ex}`)
}
Разумеется, весь приведенный выше код внутри функции синхронизации позволяет использовать оператор await.
[1] https://developers.google.com/drive/api/v3/reference/files#resource
[2] https://developer.mozilla.org/en-US/docs/Web/API/Body/json