javascript - 使用 node.js 从 Google Drive 读取二进制文件

标签 javascript binary google-drive-api

我在使用 API 从云端硬盘获取二进制文件时遇到问题,我一直在兜圈子。

这里是相关的代码位:

// Load client secrets from a local file.
fs.readFile('client_secret.json', function processClientSecrets(err, content) {
  if (err) {
    console.log('Error loading client secret file: ' + err);
    return;
  }
  // Authorize a client with the loaded credentials, then call the
  // Drive API.
  oauth.authorize(JSON.parse(content), dasm.init, driveapi.getFile)
});

driveapi.getFile:

function getFile(auth, cb) {
  var service = google.drive('v3');
  service.files.get({
    auth: auth,
    pageSize: 20,
    fileId: "0B2h-dgPh8_5CZE9WZVM4a3BxV00",
    alt: 'media'
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return;
    }
    cb(response)
  });
}

现在,response 似乎以字符串形式返回。当我尝试转换为十六进制时,它变得疯狂了。有什么方法可以获取 response 并将其放入 Buffer 中?或者它是否在我从 service.files.get 获取它时损坏了?

我是说疯了

console.log(
        arrData[0].charCodeAt(0).toString(2),
        '-',
        arrData[1].charCodeAt(0).toString(2),
        '-',
        arrData[2].charCodeAt(0).toString(2),
        '-',
        arrData[3].charCodeAt(0).toString(2),
        '-',
        arrData[4].charCodeAt(0).toString(2)
    )

= 1001101 - 1011010 - 1111111111111101 - 0 - 11(我正在使用二进制来尝试查看损坏的内容)

正确的十六进制应该是 4D 5A 90 00 03

编辑:对于那些像我一样困惑的人,90 是如何变成 fffdUnicode replacement character当值未映射到 ASCII 字符时显示。

最佳答案

终于解决了这个问题。 Google API 使用请求模块,您可以 apply any options它接受。作为引用,您需要设置 [encoding: null] 2 ,因为任何其他选项都会通过 toString 传递响应,因此如果您使用的是二进制数据,则会破坏它。

工作代码如下:

function getFile(auth, cb) {
  var service = google.drive({
    version: 'v3', 
    encoding: null
  });
  service.files.get({
    auth: auth,
    fileId: "0B2h-dgPh8_5CZE9WZVM4a3BxV00",
    alt: 'media'
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return;
    }
    cb(response)
  });
}

关于javascript - 使用 node.js 从 Google Drive 读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826608/

相关文章:

python - 输入列表中的单个项目

bash - 直接从 curl 执行二进制文件

java - 带有回调的方法中的操作顺序不正确

python - Google Drive SDK 未返回 google Docs 格式的 headRevisionId

javascript - 如何使用 javascript 访问(编辑和阅读)与我共享的谷歌文档

javascript - 元素相对于另一个元素的非线性运动

javascript - 我可以将 writeStream.bytesWritten 与管道一起使用吗?

javascript - 从传递给函数的字符串调用 javascript 函数

javascript - PrimeFaces 中的 RequestContext 和 Ajax 状态

java - 解释逐步执行递归代码以在 Java 中将十进制转换为二进制