有一个由 Google 云端硬盘托管的共享电子表格文件的网址。
看起来和这个很像
https://docs.google.com/spreadsheets/d/1TFFswncS12FAc-Fsh33dMfL0UK87LCcZZNToV0/edit?usp=sharing
我想使用一些 Google 服务帐户和 Google Drive API 客户端库通过 nodejs 应用程序下载此文件。但据我所知,该库没有这种通过 URL 下载文件的方法或选项。
https://developers.google.com/drive/api/v3/manage-downloads
取而代之的是,有一个 get
方法需要 fileId
属性,在我看来,通过该 fileId
访问某人的文件是不可能的。
因此,很可能,我必须根据服务帐户 client_id
和 private_key
生成身份验证令牌,并使用任何将令牌作为标头传递的 HTTP 客户端下载(实际上是导出的 CSV) .
这是一个正确的选择吗?如何在没有密码的情况下对应用进行身份验证?
我有这样的应用环境变量
GOOGLE_FEED_ACCOUNT_TYPE=service_account
GOOGLE_FEED_PROJECT_ID=my-app
GOOGLE_FEED_PRIVATE_KEY_ID=sdf796a7S58FSADF9A8S97FD987AS6D8F75A8Sas
GOOGLE_FEED_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n"
GOOGLE_FEED_CLIENT_EMAIL=my-app@example.com
GOOGLE_FEED_CLIENT_ID=398387234329388162487
GOOGLE_FEED_FOLDER_ID=1QFBASSDFasdfasew3wsD85cHpf-9U
答案 0 :(得分:1)
您需要了解的是,如果其他人可以访问您的文件,那么它的私人数据。您需要获得苍蝇所有者的许可才能访问它。使用服务帐户,您可以对其进行预授权并授予其访问文件的权限。如果此人与服务帐户电子邮件地址共享文件,就像您与任何其他用户共享文件一样,那么只有这样,服务帐户才能下载文件。
<块引用>这是一个正确的选择吗?如何在没有密码的情况下对应用进行身份验证?
您可以访问私人用户数据的唯一方法是用户授予您访问权限。您可以使用 Oauth2 并要求用户运行您的应用程序并授予您访问权限,或者您可以使用服务帐户并预先授权它访问数据。
如果没有他们以某种方式授予您访问权限,则确实无法访问私人用户数据。客户端登录使用的登录名和密码在 2015 年被谷歌关闭,因此多年来一直无法使用。
您说得对,这不是通过下载 url 来完成的,而是通过使用您要下载的文件的 file.id 来完成的。
因为您将成为 downloading 一个 Google 表格,所以您想要执行 file.export 以下载苍蝇。文件导出会将您的工作表转换为 csv 文件,以便您可以在您的机器上阅读。
只需确保您与服务帐户共享它即可。
const {google} = require('googleapis');
const auth = new google.auth.GoogleAuth({
keyFile: '/path/to/your-secret-key.json',
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
});
var fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
var dest = fs.createWriteStream('/tmp/resume.pdf');
drive.files.export({
fileId: fileId,
mimeType: 'application/pdf'
})
.on('end', function () {
console.log('Done');
})
.on('error', function (err) {
console.log('Error during download', err);
})
.pipe(dest);