gpt4 book ai didi

google-apps-script - 谷歌应用脚​​本: Downloading files from Drive (same user)

转载 作者:行者123 更新时间:2023-12-02 22:34:02 25 4
gpt4 key购买 nike

我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件(可能是 .csv 文件)。我找到了 getDownloadUrl() 方法,但我无法弄清楚如何使用它做什么。我当前正在尝试以下代码,其中 files 是文件夹中的文件列表:

while(files.hasNext()) {
var response = UrlFetchApp.fetch(files.next().getDownloadUrl());
Logger.log(response.getContentText());
}

但是,当我尝试运行代码时,我收到 401 错误,我猜这意味着我缺乏适当的授权?但我的印象是,如果一切都在我的一个 Google 帐户中进行,我就不需要执行所有 OAuth2 步骤。 The Google guide to connecting to external APIs看起来我应该能够获取网址。我已经可以访问我的云端硬盘文件,因为当我运行该方法时,下载 URL 确实存在。我在这里缺少什么?我对这一切都很陌生,所以也许这是一些基本的东西。

谢谢!

编辑:我通过修改代码成功修复了401错误,如下:

while(files.hasNext()) {
var response = UrlFetchApp.fetch(files.next().getDownloadUrl(),{headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}});
Logger.log(response.getContentText());
}

但问题仍然是,这只将内容返回给我,而不是下载文件。如何根据此 fetch 调用的结果启动下载?

最佳答案

除了列出所有下载链接之外,我猜原始发布者还想将文件下载到用户的计算机上(根据之前的discussion)。

为此,请在服务器端使用 Base 64 对 blob 进行编码(例如 Google App Script),并在客户端浏览器中使用数据 URI 进行下载。以下是在 this answer 的帮助下实现的代码.

Google 应用脚本

...

function getBlobInBase64(fileId){
// omit authorization code if any

var file = DriveApp.getFileById(fileId);
var blob = file .getBlob();

return {
file_name: file.getName(),
mime: file.getMimeType(),
b64: Utilities.base64Encode(blob.getBytes());
}

...

index.html 一起使用的 Javascript

...

function getFile(fileId){
google.script.run.withSuccessHandler((data) => {

var uri = 'data:' + data.mime + ';charset=ISO-8859-1;base64,' + encodeURIComponent(data.b64);
downloadURI(uri, data.file_name);

}).withFailureHandler((err) => {
console.log(err);
}).getBlobInBase64();
}

...

注意:我还没有运行此代码,但该方法应该可以像我的其他项目中使用的那样工作。

关于google-apps-script - 谷歌应用脚​​本: Downloading files from Drive (same user),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42947229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com