如何使用Google Drive Node.js API

993 阅读6分钟

开始使用Google Drive Node.js API

Google Drive API是谷歌开发的一个产品,目的是让开发者能够创建使用Google Drive云存储的应用程序。通过该API,你可以开发一个无缝集成Google Drive的应用程序,用于数据存储和共享。

简介

该API提供的功能包括上传、删除、共享和下载存在于Google Drive账户中的文件。

目标

在本教程结束时,我们将建立一个基本的Node.js 应用程序,用于上传、删除和生成Google Drive中上传文件的可共享链接。我们将使用API来执行所有这些活动。

本教程主要关注API的后端集成。

项目设置

通过执行下面的命令创建一个名为drive-api-node 的目录。

mkdir drive-api-node
cd drive-api-node

为了创建Node.js应用程序,我们将运行下面的命令来初始化一个package.json 文件。

npm init -y

接下来,我们将通过以下命令安装googleapis 的依赖关系。

npm install –save googleapis

在根文件夹中创建一个名为index.js 的文件。我们将在这个文件中编写大部分的代码。这个文件是应用程序的入口。

设置授权凭证

我们需要一个客户端ID和秘密来访问驱动器存储。

  1. 访问console.cloud.google.com
  2. 如果你没有现有的项目,就创建一个新项目。
  3. 选择该项目,并选择APIs and services
  4. 点击ENABLE APIS AND SERVICES
  5. 在搜索框中,搜索google drive api ,然后为创建的项目启用它。
  6. 一旦你启用了API,选择CREATE CREDENTIALS 来访问API。在下拉菜单中,选择Oath client ID 。这个选项将生成一个客户ID和客户秘密的密钥对。
  7. 接下来,选择CONFIGURE CONSENT SCREEN ,这将询问用户是否希望应用程序使用创建的客户ID和秘密访问他们的驱动器。选择External ,然后点击CREATE 按钮。
  8. 输入你的应用程序的appname ,即支持电子邮件。我现在忽略了应用程序的标志,因为它将要求验证。提供所要求的细节,然后点击Save ,返回到Credentials screen
  9. 为应用程序类型选择Web Application 。按照指示输入JavaScript原点,重定向URL,我用这个做重定向URL。点击Create
  10. 我们现在可以把客户ID和客户秘密复制到我们的应用程序。
  11. Auth Comscent Screen ,点击ADD USER ,然后插入一个有效的电子邮件,其谷歌账户将用于测试该应用程序。

导入依赖性

添加下面的代码片断,将已安装的依赖项纳入项目中。file systempath 模块将使我们能够获得要上传到Google drive的文件的路径。

//googleapis
const { google } = require('googleapis');

//path module
const path = require('path');

//file system module
const fs = require('fs');

客户端ID和秘密

我们可以从仪表板上获得CLIENT_IDSECRECT ,因为我们之前已经创建了它们。在index.js ,添加下面的片段,包括client IDsecret

//client id
const CLIENT_ID = 'YOUR CLIENT IS'

//client secret
const CLIENT_SECRET = 'YOUR CLIENT SECRET';

重定向URL和刷新令牌

使用oathplayground链接作为重定向_url。

要生成刷新令牌。

  1. 前往宣誓广场并选择Drive Api v3
  2. Drive Api v3 ,选择这个链接www.googleapis.com/auth/drive,以启用谷歌驱动器文件的访问、编辑、创建和删除。
  3. 在右上方,点击setting icon ,然后在下拉菜单中,勾选use your own Auth credentials 复选框。
  4. 在输入框中,填写客户ID和秘密,然后点击close ,再点击Authorize Apis
  5. 在下一步,我们将选择我们将在驱动器上使用的谷歌账户。使用你在Auth Consent Screen 中作为测试用户添加的账户。
  6. 在下一个屏幕中,点击allow ,授予Google Drive编辑、创建和删除文件的API权限。
  7. 你将被重新引导到宣誓广场。点击exchange authorization code for tokens ,获得刷新令牌。

现在将刷新令牌存储在常量中,如下图所示。

//redirect URL
const REDIRECT_URI = 'https://developers.google.com/oauthplayground';

//refresh token
const REFRESH_TOKEN = 'YOUR REFRESH TOKEN`

认证客户端

为了初始化认证客户端,在index.js 文件中添加以下代码。

//intialize auth client
const oauth2Client = new google.auth.OAuth2(
    CLIENT_ID,
    CLIENT_SECRET,
    REDIRECT_URI
);

接下来,我们需要在初始化的认证客户端中设置认证凭证。要设置认证证书,请将下面的代码段添加到初始化的认证客户端中。

//setting our auth credentials
oauth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });

初始化谷歌驱动器

要初始化Google Drive,请添加下面的代码段。

//initialize google drive
const drive = google.drive({
    version: 'v3',
    auth: oauth2Client,
});

接下来,我们指定要上传到谷歌驱动器的文件路径。

//file path for out file
const filePath = path.join(__dirname, 'filename.format');

谷歌驱动器的功能

我们已经为项目设置了一切。现在我们需要为项目目标中指定的基本功能添加代码段。

我们将写三个函数来上传一个文件到Google Drive,删除一个指定的文件,以及生成一个Google Drive中现有文件的可共享链接。

上传一个文件到Google Drive

uploadfile 函数不接受任何参数。它是一个异步函数,发送一个请求并等待来自服务器的响应。在request body ,我们提供了filenamemimeType

mimeType 指定了文件格式。

下面的片段显示了上传文件到Google Drive的功能。

//function to upload the file
async function uploadFile() {
    try{
      const response = await drive.files.create({
            requestBody: {
                name: 'hero.png', //file name
                mimeType: 'image/png',
            },
            media: {
                mimeType: 'image/png',
                body: fs.createReadStream(filePath),
            },
        });  
        // report the response from the request
        console.log(response.data);
    }catch (error) {
        //report the error message
        console.log(error.message);
    }
}  

删除文件的功能

Google Drive中的每个文件都有一个唯一的ID。delete file function 将删除请求正文中由ID指定的文件。下面的片段被添加到index.js 文件中,以删除一个文件。

//delete file function
async function deleteFile() {
    try {
        const response = await drive.files.delete({
            fileId: 'File_id',// file id
        });
        console.log(response.data, response.status);
    } catch (error) {
        console.log(error.message);
    }
  }

对于文件ID,当Upload file() 函数被调用时,该函数在响应中返回上传文件的file id 。在测试过程中,一定要复制响应中的文件ID。用于deleteFile() 函数中的数据。

生成链接函数

这个函数负责创建一个链接来访问驱动器文件夹中的文件。首先,该函数应将权限改为公开,以便任何人都可以访问。这个过程是必要的,因为在上传过程中,只有上传文件的用户可以访问该文件。

//create a public url
async function generatePublicUrl() {
    try {
        const fileId = '19VpEOo3DUJJgB0Hzj58E6aZAg10MOgmv';
        //change file permisions to public.
        await drive.permissions.create({
            fileId: fileId,
            requestBody: {
            role: 'reader',
            type: 'anyone',
            },
        });

        //obtain the webview and webcontent links
        const result = await drive.files.get({
            fileId: fileId,
            fields: 'webViewLink, webContentLink',
        });
      console.log(result.data);
    } catch (error) {
      console.log(error.message);
    }
  }

webContent 链接直接将文件下载到系统中。webViewLink 是一个在浏览器中查看文件的链接,无需任何凭证。

总结

在本教程中,我解释了如何用Node.js设置Google Drive。我们写了一些函数来上传、删除和分享Google Drive中的文件。