Я разрабатываю NodeJS API для загрузки нескольких изображений в Google Driver, когда пользователь создает электронную книгу (включая имя, описание и ebookPhoto), я использую ExpressJS для написания Rest API. А с помощью multer-google-drive это механизм хранения промежуточного программного обеспечения для загрузки файлов на Google Drive. Я также перехожу по этой ссылке Загрузка изображений на Google Drive , чтобы загрузить файл на Google Drive. Ниже приведены шаги, которые я сделал.
1 - Шаг 1: Я запускаю следующий код, чтобы получить файл "token. json".
const fs = require('fs');
const readline = require('readline');
const { google } = require('googleapis');
const SCOPES = ['https://www.googleapis.com/auth/drive.file']; // This SCOPE is for upload file
const credentials = require('./credentials.json');
const TOKEN_PATH = 'token.json';
const getAccessToken = (oAuth2Client, resolve, reject) => {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES,
});
console.log('Authorize this app by visiting this url:', authUrl);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.question('Enter the code from that page here: ', (code) => {
rl.close();
oAuth2Client.getToken(code, (err, token) => {
if (err) return reject('Error retrieving access token', err);
oAuth2Client.setCredentials(token);
// Store the token to disk for later program executions
fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
if (err) return reject(err);
console.log('Token stored to', TOKEN_PATH);
});
resolve(oAuth2Client);
});
});
}
2 - Шаг 2 Я запускаю ниже код для получения авторизации:
const {google} = require('googleapis');
const credentials = require('./credentials.json')
const token = require('./token.json');
const authorize = () => {
const { client_secret, client_id, redirect_uris } = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]);
if (token && typeof token === 'object') {
return oAuth2Client.setCredentials(token);
}
return null
}
var drive = google.drive({version: 'v3', auth: authorize});
3 - Шаг 3 - это шаг с использованием multer-google-drive для загрузки файлов, я делаю так:
// Upload lên storage của google
var gDriverUpload = multer({
storage: GoogleDriveStorage({
drive: drive,
parents: 'id-parents', // this is id of folder in google drive
fileName: function (req, file, cb) {
let filename = `ebook-${file.originalname}`;
cb(null, filename);
}
})
})
И это мой маршрут для API:
// Create and upload to google driver
EbookRouter.post('/gdriver', gDriverUpload.array('ebookPhoto', 5), ebookController.createEbook);
Поэтому, когда я вызываю API таким образом, чтобы загрузить информацию Ebook (включая ebookPhoto), я получаю имя ошибки: «Требуется вход в систему»
localhost:3009/api/ebook/gdriver
Ошибка детализации ниже:
POST /api/ebook/gdriver 500 1478.509 ms - 354
Error: Login Required
at Gaxios._request (E:\google_api_uploader\node_modules\gaxios\build\src\gaxios.js:85:23)
at process._tickCallback (internal/process/next_tick.js:68:7)
Пожалуйста, помогите мне выяснить эту проблему. Большое вам спасибо