Эта проблема
У меня есть файл на Google Диске, который был загружен с помощью Google drive api v3. Рассматриваемый файл не был преобразован в таблицу Google при загрузке. (Да, мой код был испорчен, пытаюсь это исправить.)
Он был загружен с mime-типом text/csv
. На изображении ниже его тип показан как Comma separated values
.
У меня есть еще один файл, который был загружен с правильным типом mime application/vnd.google-apps.spreadsheet
, что привело к преобразованию файла в лист Google. Изображение ниже показывает его тип как Google sheet
.
Обновите файл и исправьте.
Я пытаюсь запустить file.update для файла, который был загружен с неправильным типом MIME, измените его тип MIME и снова загрузите файл, в результате чего он будет преобразован в лист Google.
Отправка следующих метаданных для файла должна привести к его преобразованию.
'mimeType': 'application/vnd.google-apps.spreadsheet'
К сожалению, это не приводит к следующей ошибке
ошибки: [{домен: 'global', причина: 'invalidContentType', сообщение: 'Недопустимый тип MIME для загруженного содержимого.', locationType: 'other', location: 'media.mimeType'}
мой код
const fs = require('fs');
const readline = require('readline');
const {google} = require('googleapis');
// npm install googleapis
// https://developers.google.com/drive/api/v3/quickstart/nodejs
// Desktop app credentials from Google Cloud console.
const KEYFILEPATH = 'C:\\Youtube\\dev\\ServiceAccountCred.json';
const FILEIDTOUPDATE = '1YtJxL1WptkHUbDHNWpcbKwcRs7rPo_cY';
// If modifying these scopes, delete token.json.
const SCOPES = ['https://www.googleapis.com/auth/drive'];
// Create a service account initialize with the service account key file and scope needed
const auth = new google.auth.GoogleAuth({
keyFile: KEYFILEPATH,
scopes: SCOPES
});
/**
* Creates a new file on google drive and uploads it.
* @param {google.auth.OAuth2} auth An authorized OAuth2 client.
*/
async function createAndUploadFile(auth) {
const driveService = google.drive({version: 'v3', auth});
let fileMetadata = {
'name': 'sheet',
'mimeType': 'application/vnd.google-apps.spreadsheet' // will cause the file to be converted to the google drive type.
};
let media = {
mimeType: 'text/csv',
body: fs.createReadStream('sheet.csv')
};
await driveService.files.update({
fileId : FILEIDTOUPDATE,
resource: fileMetadata,
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.data.id);
}
});
}
createAndUploadFile(auth).catch(console.error);
что я пробовал.
Чтобы проверить, что на самом деле это не проблема с моим кодом, я запустил код на лист, который был загружен правильно, и он работал нормально. Согласно документации MimeType должен быть доступен для записи
Я затрудняюсь объяснить эту проблему. Мне интересно, не обладает ли метод обновления скрытой суперсилой, которой обладает метод создания.
While I understand your workaround, the documentation states mine type is write able so I should be able to update it. I already know about the copy method I am trying to use the update method.
я понял, что мой ответ не был полезен для вашей ситуации. Я глубоко извиняюсь за свои плохие навыки. Поэтому я хочу удалить свой ответ. - person Tanaike   schedule 25.04.2021