使用 Drive api 获取驱动器文件的 blob
Get the blob of a drive file using Drive api
我使用下面的脚本来获取通过我的 Apps 脚本项目生成的 abc.dat
文件的 blob。使用云端硬盘服务,这很容易。
使用的 oauthScope 是 https://www.googleapis.com/auth/drive.readonly
function ReadData() {
var files;
var folders = DriveApp.getFoldersByName("Holder");
if (folders.hasNext()) {
var folder = folders.next();
var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
if(file.getName()=='abc.dat'){
var content = file.getBlob().getDataAsString();
return content;
}
}
}
return '';
}
为了缩小身份验证范围,现在我正在修改代码以完全删除 https://www.googleapis.com/auth/drive.readonly
oauthScope 并仅使用https://www.googleapis.com/auth/drive.file
oauthScope。
使用驱动器 api,我没有找到直接获取文件 blob 的方法。
我使用下面的脚本来获取 word 文档文件的 blob。但它不适用于错误为 fileNotExportable, Export only supports Docs Editors files, code 403
的 .dat 文件
function getBlob(fileID, format){
var url = "https://www.googleapis.com/drive/v3/files/" + fileID + "/export?mimeType="+ format;
var blob = UrlFetchApp.fetch(url, {
method: "get",
headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions: true
}).getBlob();
return blob;
}
找到这个 并尝试在 url
中将 export
更改为 get
。返回的 blob.getDataAsString()
现在给出“未找到”。
我在创建 abc.dat 文件时使用的 mimeType 是 application/octet-stream .dat
。但是查看生成的文件,它的mimeType是text/plain
。所以我在 getBlob
函数中使用 'text/plain' 作为 'format' 参数的输入。
.dat 文件创建代码:
var connectionsFile = {
title: filename,
mimetype: "application/octet-stream .dat",
parents: [{'id':folder.getId()}],
};
var blobData = Utilities.newBlob(contents);
file = Drive.Files.insert(connectionsFile,blobData);
}
如何修改此代码以从文件中获取 blob?还是有其他解决办法?
提前致谢!
我认为在你的情况下,需要使用get
方法而不是export
方法。因为 export
方法用于 Google 文档文件(文档、电子表格、幻灯片等)。当你的脚本修改后,下面的修改怎么样?
修改后的脚本:
function getBlob(fileID) {
var url = "https://www.googleapis.com/drive/v3/files/" + fileID + "?alt=media";
var blob = UrlFetchApp.fetch(url, {
method: "get",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
muteHttpExceptions: true
}).getBlob();
return blob;
}
参考:
我使用下面的脚本来获取通过我的 Apps 脚本项目生成的 abc.dat
文件的 blob。使用云端硬盘服务,这很容易。
使用的 oauthScope 是 https://www.googleapis.com/auth/drive.readonly
function ReadData() {
var files;
var folders = DriveApp.getFoldersByName("Holder");
if (folders.hasNext()) {
var folder = folders.next();
var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
if(file.getName()=='abc.dat'){
var content = file.getBlob().getDataAsString();
return content;
}
}
}
return '';
}
为了缩小身份验证范围,现在我正在修改代码以完全删除 https://www.googleapis.com/auth/drive.readonly
oauthScope 并仅使用https://www.googleapis.com/auth/drive.file
oauthScope。
使用驱动器 api,我没有找到直接获取文件 blob 的方法。
我使用下面的脚本来获取 word 文档文件的 blob。但它不适用于错误为 fileNotExportable, Export only supports Docs Editors files, code 403
function getBlob(fileID, format){
var url = "https://www.googleapis.com/drive/v3/files/" + fileID + "/export?mimeType="+ format;
var blob = UrlFetchApp.fetch(url, {
method: "get",
headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions: true
}).getBlob();
return blob;
}
找到这个 url
中将 export
更改为 get
。返回的 blob.getDataAsString()
现在给出“未找到”。
我在创建 abc.dat 文件时使用的 mimeType 是 application/octet-stream .dat
。但是查看生成的文件,它的mimeType是text/plain
。所以我在 getBlob
函数中使用 'text/plain' 作为 'format' 参数的输入。
.dat 文件创建代码:
var connectionsFile = {
title: filename,
mimetype: "application/octet-stream .dat",
parents: [{'id':folder.getId()}],
};
var blobData = Utilities.newBlob(contents);
file = Drive.Files.insert(connectionsFile,blobData);
}
如何修改此代码以从文件中获取 blob?还是有其他解决办法?
提前致谢!
我认为在你的情况下,需要使用get
方法而不是export
方法。因为 export
方法用于 Google 文档文件(文档、电子表格、幻灯片等)。当你的脚本修改后,下面的修改怎么样?
修改后的脚本:
function getBlob(fileID) {
var url = "https://www.googleapis.com/drive/v3/files/" + fileID + "?alt=media";
var blob = UrlFetchApp.fetch(url, {
method: "get",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
muteHttpExceptions: true
}).getBlob();
return blob;
}