gpt4 book ai didi

javascript - 如何使用 Google Drive API 通过 Javascript 下载文件

转载 作者:搜寻专家 更新时间:2023-11-01 05:04:04 26 4
gpt4 key购买 nike

我想使用 javascript API 从 google drive 下载文件。我已设法使用 gapi.client.drive.files 请求验证和加载文件列表。但是,我一直坚持下载这些文件。
我尝试下载文件:

var request = gapi.client.drive.files.get({
fileId:id,
alt:'media'
});
request.execute(function(resp){
console.log(resp);
});

我在尝试运行上面的代码时遇到了这些错误:

(403) The user has not granted the app 336423653212 read access to the file 0B0UFTVo1BFVmeURrWnpDSloxQlE.

(400) Bad Request

我知道不是谷歌驱动器文件(谷歌文档、谷歌幻灯片)的文件返回 403 错误。
我是新来的。非常感谢任何帮助和回答。

更新 0

来自关于 Handling API Error 的 Google 云端硬盘文档, 这里是 400 errors

的部分解释

This can mean that a required field or parameter has not been provided, the value supplied is invalid, or the combination of provided fields is invalid.

这是因为我的参数对象中有 alt:'media'

我尝试了 gapi.client.drive.files.export,但它也不起作用并返回 (403) Insufficient Permission 尽管我的 Google 云端硬盘帐户具有编辑权限对于那些文件。这是我的代码:

var request = gapi.client.drive.files.get({
fileId:element.id,
});
request.then(function(resp){
console.log(resp.result);
type = resp.result.mimeType;
id = resp.result.id;
var request = gapi.client.drive.files.export({
fileId:id,
mimeType:type
})
request.execute(function(resp){
console.log(resp);
});
});

更新 1

基于 abielita's answer ,我试图发出授权的 HTTP 请求,但它没有下载文件。它实际上返回了XMLHttpRequest对象中的responseresponseText属性中的文件信息。

  function test() {
var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.googleapis.com/drive/v3/files/"+'1A1RguZpYFLyO9qEs-EnnrpikIpzAbDcZs3Gcsc7Z4nE', true);
xhr.setRequestHeader('Authorization','Bearer '+accessToken);
xhr.onload = function(){
console.log(xhr);
}
xhr.send('alt=media');
}

____________________________________________________________

我发现我实际上可以使用文件的 webViewLinkwebViewContent 属性从文件夹中检索所有这些文件的 URL。

  • 来自 Google Drive 类型的文件(Google Doc、Google Sheet、等...) 将具有 webViewLink 属性。 webViewLink 将打开Google 云端硬盘中的文件。

  • 非 Google Drive 类型的文件将具有 webContentLink。一种webContentLink 将下载文件。

我的代码:

var request = gapi.client.drive.files.list({
q:"'0Bz9_vPIAWUcSWWo0UHptQ005cnM' in parents", //folder ID
'fields': "files(id, name, webContentLink, webViewLink)"
});
request.execute(function(resp) {
console.log(resp);
}

最佳答案

基于此documentation ,如果您使用 alt=media,则需要向文件的 resource URL 发出授权的 HTTP GET 请求并包含查询参数 alt=media

GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media
Authorization: Bearer ya29.AHESVbXTUv5mHMo3RYfmS1YJonjzzdTOFZwvyOAUVhrs

检查 here使用我们的 Drive API 客户端库执行文件下载的示例。

String fileId = "0BwwA4oUTeiV1UVNwOHItT0xfa2M";
OutputStream outputStream = new ByteArrayOutputStream();
driveService.files().get(fileId)
.executeMediaAndDownloadTo(outputStream);

对于错误(403) Insufficient Permission,这可能是您的访问 token 的问题,而不是您的项目配置的问题。

如果您在检索访问 token 时没有请求所需的范围,则会返回权限不足错误。您可以通过将 access_token 传递给此端点来检查您请求了哪些范围:https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ACCESS_TOKEN

检查这些链接:

关于javascript - 如何使用 Google Drive API 通过 Javascript 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860901/

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