如何在流星上使用Google Drive API上传文件?

时间:2018-06-26 13:50:23

标签: javascript meteor google-drive-api google-drive-realtime-api

我正在使用Meteor框架来实现Google Drive API。我已经生成了clientId,clientSecret和redirectUrl。

在这种方法中,我必须获取URL,然后单击“ Allow”(允许)按钮,获得在重定向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 :(得分:0)

您正在使用仅用于终端(命令提示符)的代码。 正如文档在下面的链接中所述

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

  

此示例中的授权流是为命令行设计的   应用。有关如何执行其他授权的信息   上下文,请参阅授权和验证。的部分   图书馆的自述文件。

对于您的答案,您应该通读并使用下面的API Doc链接中给出的代码:-

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

谢谢

答案 1 :(得分:0)

确保已遵循适用于所有应用程序的OAuth 2.0常规过程。

  
      
  1. 创建应用程序时,您可以使用Google进行注册   API控制台。然后Google提供您以后需要的信息,   例如客户ID和客户机密。
  2.   
  3. 在Google API控制台中激活Drive API。 (如果API不是   列在API控制台中,然后跳过此步骤。)
  4.   
  5. 当您的应用程序需要访问用户数据时,它会询问Google   特定的访问范围。
  6.   
  7. Google向用户显示同意屏幕,要求他们   授权您的应用程序请求其一些数据。
  8.   
  9. 如果用户批准,则Google会给您的申请一个   短期访问令牌。
  10.   
  11. 您的应用程序请求用户数据,并将访问令牌附加到   请求。如果Google确定您的请求和令牌   有效,它将返回请求的数据。
  12.   

有关其他参考,您可以遵循此SO post

答案 2 :(得分:0)

由于版本问题不支持高于25.0.0.1,我在使用googleapis集成JavaScript时遇到了同样的问题,但是当我通过这样的认证时,它解决了我的问题

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');

    })
};