开始使用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和秘密来访问驱动器存储。
- 访问console.cloud.google.com。
- 如果你没有现有的项目,就创建一个新项目。
- 选择该项目,并选择
APIs and services。 - 点击
ENABLE APIS AND SERVICES - 在搜索框中,搜索
google drive api,然后为创建的项目启用它。 - 一旦你启用了API,选择
CREATE CREDENTIALS来访问API。在下拉菜单中,选择Oath client ID。这个选项将生成一个客户ID和客户秘密的密钥对。 - 接下来,选择
CONFIGURE CONSENT SCREEN,这将询问用户是否希望应用程序使用创建的客户ID和秘密访问他们的驱动器。选择External,然后点击CREATE按钮。 - 输入你的应用程序的
appname,即支持电子邮件。我现在忽略了应用程序的标志,因为它将要求验证。提供所要求的细节,然后点击Save,返回到Credentials screen。 - 为应用程序类型选择
Web Application。按照指示输入JavaScript原点,重定向URL,我用这个做重定向URL。点击Create。 - 我们现在可以把客户ID和客户秘密复制到我们的应用程序。
- 在
Auth Comscent Screen,点击ADD USER,然后插入一个有效的电子邮件,其谷歌账户将用于测试该应用程序。
导入依赖性
添加下面的代码片断,将已安装的依赖项纳入项目中。file system 和path 模块将使我们能够获得要上传到Google drive的文件的路径。
//googleapis
const { google } = require('googleapis');
//path module
const path = require('path');
//file system module
const fs = require('fs');
客户端ID和秘密
我们可以从仪表板上获得CLIENT_ID 和SECRECT ,因为我们之前已经创建了它们。在index.js ,添加下面的片段,包括client ID 和secret 。
//client id
const CLIENT_ID = 'YOUR CLIENT IS'
//client secret
const CLIENT_SECRET = 'YOUR CLIENT SECRET';
重定向URL和刷新令牌
使用oathplayground链接作为重定向_url。
要生成刷新令牌。
- 前往宣誓广场并选择
Drive Api v3。 - 在
Drive Api v3,选择这个链接www.googleapis.com/auth/drive,以启用谷歌驱动器文件的访问、编辑、创建和删除。 - 在右上方,点击
setting icon,然后在下拉菜单中,勾选use your own Auth credentials复选框。 - 在输入框中,填写客户ID和秘密,然后点击
close,再点击Authorize Apis。 - 在下一步,我们将选择我们将在驱动器上使用的谷歌账户。使用你在
Auth Consent Screen中作为测试用户添加的账户。 - 在下一个屏幕中,点击
allow,授予Google Drive编辑、创建和删除文件的API权限。 - 你将被重新引导到宣誓广场。点击
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 ,我们提供了filename 和mimeType 。
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中的文件。