Как загрузить файлы с помощью Google Drive API на метеоре? - PullRequest
0 голосов
/ 26 июня 2018

Я использую инфраструктуру Meteor для реализации Google Drive API. Я сгенерировал clientId, clientSecret и redirectUrl.

В этом методе мне нужно получить URL-адрес, и когда я нажал кнопку «Разрешить», его URL-адрес перенаправления был указан в URL-адресе перенаправления. Это дает код в URL, я сохранил этот код.

 checkForAuthorization = function() {
   return new Promise(function(resolve, reject) {
   console.log("checkForAuthorization method is running......");
   var clientId, clientSecret, redirectUrl, oauth2Client;
   clientId = "XYZ";
   clientSecret = "ABC";
   redirectUrl = "http://localhost:3000/home";
   oauth2Client = new google.auth.OAuth2(clientId, clientSecret, 
      redirectUrl);
   getGoogleDriveAccessToken(oauth2Client).then(function(result) {
     resolve(result);
   }).catch(function(error) {
    reject();    
   });
   });
  };

Этот код предназначен для загрузки файла. При входе в систему появляется ошибка, в которой говорится, что требуется вход в систему.

var uploadFileOnGoogleDrive = function(token) {
    return new Promise(function(resolve, reject) {
         var fileMetadata = {
             'name': 'Claremont-Coral-Pillow-12x241.jpeg'
         };
         var media = {
               mimeType: 'image/jpeg',
               body: fs.createReadStream
                ('/home/administrator/Pictures/Claremont- 
                  Coral-Pillow-12x241.jpeg')
          };
         drive.files.create({
                    auth: token,
                    resource: fileMetadata,
                    media: media,
                    fields: 'id'
             }, function (err, file) {
             if (err) {
                  console.log("The error is ", err);      
             } else {
                  console.log('File Id: ', file.id);
             }
           });
         });
      };

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Убедитесь, что вы выполнили общий процесс OAuth 2.0 , который применим ко всем приложениям.

  1. При создании приложения вы регистрируете его с помощью Google. Консоль API. Google затем предоставляет информацию, которая понадобится вам позже, например, идентификатор клиента и секрет клиента.
  2. Активируйте Drive API в консоли Google API. (Если API не в консоли API, пропустите этот шаг.)
  3. Когда вашему приложению требуется доступ к данным пользователя, оно запрашивает у Google определенный объем доступа.
  4. Google отображает экран согласия для пользователя, прося его авторизуйте ваше приложение, чтобы запросить некоторые из его данных.
  5. Если пользователь одобряет, то Google дает вашему приложению токен недолгого доступа.
  6. Ваше приложение запрашивает данные пользователя, прикрепляя токен доступа к запрос. Если Google определяет, что ваш запрос и токен действительны, возвращает запрошенные данные.

Для дополнительной справки, вы можете следить за этим ТАК .

0 голосов
/ 27 июня 2018

У меня была такая же проблема интеграции с JavaScript с помощью googleapis из-за проблем с версиями, которые не поддерживаются более 25.0.0.1, но когда я передавал такие учетные данные, это решило мою проблему

function uploadFile(tmp_path,_folderID,file_name,contentType,cb){

  var  __fileData = fs.createReadStream(tmp_path);
   var OAuth2 = google.auth.OAuth2;
            var oauth2Client = new OAuth2(
                    client_id,
                    secretKey,
                    redirect_url
                    );
            // Retrieve tokens via token exchange explained above or set them:
            oauth2Client.credentials = {
                access_token: body.access_token,
                refresh_token: refreshToken
            };
            var drive = google.drive({version: 'v3', auth: oauth2Client});
            drive.files.create({
                resource: {
                    name: file_name,
                    parents: _folderID,
                    mimeType: contentType
                },
                media: {
                    mimeType: contentType,
                    body: __fileData
                }
            }, function (err, response) {
               if(err) cb(err,null);
                cb(null,'success');

    })
};
0 голосов
/ 27 июня 2018

Вы используете код, который сделан только для терминала (командная строка). Как говорит сама документация по ссылке ниже

https://developers.google.com/drive/api/v3/quickstart/nodejs.

Поток авторизации в этом примере предназначен для командной строки приложение. Для получения информации о том, как выполнить авторизацию в других контексты, см. Авторизация и Аутентификация. раздел README библиотеки.

Для ответа вам нужно пройти и использовать код, указанный в ссылке на API Doc ниже: -

https://github.com/google/google-api-nodejs-client/#authorizing-and-authenticating

Спасибо

...