Google 应用程序脚本从二进制文件中获取字节范围

blu*_*yke 0 javascript google-apps-script google-drive-api

我知道在Google Drive API 中,您可以请求获取某个范围内的文件的一部分:Range: bytes=500-999,但我正在查看Google Apps Script 参考,但似乎无法在其中找到等效的功能。

有没有人有任何想法?

Tan*_*ike 5

  • 您想检索文件的部分正文。
  • 您想使用 Google Apps 脚本来实现这一点。

如果我的理解是正确的,这个答案怎么样?请将此视为几种可能的答案之一。

为了实现部分下载,请Range: bytes=500-999在请求头中使用。

示例脚本:

作为一个简单的示例脚本,下面的脚本怎么样?在此脚本中,使用 Drive API 为文件 ID 的文件运行从 100 字节到 200 字节的部分下载。

var fileId = "###";  // Please set the file ID.

var start = 100;
var end = 199;
var url = "https://www.googleapis.com/drive/v3/files/" + fileId + "?alt=media";
var params = {
  method: "get",
  headers: {
    Authorization: "Bearer " + ScriptApp.getOAuthToken(),
    Range: "bytes=" + start + "-" + end,
  },
};
var bytes = UrlFetchApp.fetch(url, params).getContent();
Logger.log(bytes.length)
Run Code Online (Sandbox Code Playgroud)
  • 当你运行脚本时,100可以看到日志。
  • 重要的一点是,第 1 个字节的范围是0.
  • 另一个重点是,在 Google Apps Script 中,blob 的最大大小为 50 MB(52,428,800 字节)。所以也请注意这一点。

笔记:

  • 作为另一个示例脚本,这个怎么样?

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

8 月 19 日更新:

当我测试字节数组的最大大小时,我可以注意到规范已更改。所以我将其添加为更新的规范。

  • 之前:最大 blob 大小为 52,428,800 字节。准确的说,当超过 50MB 的 blob 转换为字节数组时,会出现错误。这样,当将 50 MB 的字节数组添加到 50 MB 的字节数组时,会发生与最大大小相关的错误。这是我之前测量的实验结果。

  • 现在:现在,当我再次测试这种情况时,虽然无法检索到 52,428,801 字节的文件作为字节数组(这是相同的规范。最大 blob 大小为 52,428,800 字节。),但我注意到 52,428,800 字节的字节数组必须能够添加到 52,428,800 字节的字节数组中。通过这个,我可以确认可以创建 104,857,600 的字节数组。