В вашей ситуации, когда вы загружаете файл с помощью gapi.client.drive.files.create()
, создается пустой файл с загруженными метаданными.Если мое понимание верно, как насчет этого обходного пути?Я испытал ту же ситуацию с вами.В то время я использовал этот обходной путь.
Точки изменения:
- Получение токена доступа с помощью gapi.
- Файл загружается с использованием XMLHttpRequest.
Модифицированный скрипт:
Пожалуйста, измените скрипт в uploadFile()
.
let ftu = document.getElementsByName('fileToUpload')[0].files[0];
var metadata = {
'name': ftu.name,
'mimeType': ftu.type,
};
var accessToken = gapi.auth.getToken().access_token; // Here gapi is used for retrieving the access token.
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', ftu);
var xhr = new XMLHttpRequest();
xhr.open('post', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,name,kind');
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.responseType = 'json';
xhr.onload = () => {
console.log(xhr.response);
};
xhr.send(form);
Примечание:
- В этом модифицированном скрипте предполагается, чтоDrive API включен на консоли API, и токен доступа может использоваться для загрузки файла.
- О полях, которые вы используете
id,name,kind
.Так что этот образец также использует их.
Ссылка:
Если я неправильно понимаю ваш вопрос или этоизвините. Обходной путь для вашей ситуации не помог, извините.
Редактировать:
Когда вы хотите использовать fetch
, как насчет этого примера сценария?
let ftu = document.getElementsByName('fileToUpload')[0].files[0];
var metadata = {
'name': ftu.name,
'mimeType': ftu.type,
};
var accessToken = gapi.auth.getToken().access_token; // Here gapi is used for retrieving the access token.
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', ftu);
fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,name,kind', {
method: 'POST',
headers: new Headers({'Authorization': 'Bearer ' + accessToken}),
body: form
}).then((res) => {
return res.json();
}).then(function(val) {
console.log(val);
});