gpt4 book ai didi

node.js - 从 Drive API v3 下载图像不断会出现损坏的图像。我应该如何解码 promise 的响应?

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:55 25 4
gpt4 key购买 nike

我正在尝试使用 API v3 从 Google 共享云端硬盘下载图像。下载本身会成功,但看不到图像。从 MacOS 查找器中打开图像只会出现一个旋转窗口。我开始使用文档中的示例(此处:https://developers.google.com/drive/api/v3/manage-downloads):

const drive = google.drive({version: 'v3', auth});

// ....

var fileId = '0BwwA4oUTeiV1UVNwOHItT0xfa2M';
var dest = fs.createWriteStream('/tmp/photo.jpg');
drive.files.get({
fileId: fileId,
alt: 'media'
})
.on('end', function () {
console.log('Done');
})
.on('error', function (err) {
console.log('Error during download', err);
})
.pipe(dest);

但是失败了,因为 .on() 方法不存在。确切的错误是“TypeError:drive.files.get(...).on不是函数”

.get() 方法返回一个 promise 。 Promise 的响应包含数据,根据配置,这些数据可以是流、blob 或数组缓冲区。对于所有选项,当我将响应数据写入文件时,文件本身变得不可见并且大小错误。 arraybuffer 示例的实际代码(typescript、node.js)如下。 blob 的类似代码(添加了名称和修改日期)和流的代码给出了相同的结果。

        const downloader = googleDrive.files.get({
fileId: file.id,
alt: 'media',
}, {
responseType: 'arraybuffer',
});

return downloader
.then((response) => {

const targetFile = file.id + '.' + file.extension;

fs.writeFileSync(targetFile, response.data);

return response.status;
})
.catch((response) => {
logger.error('Error in Google Drive service download: ' + response.message);
return response.message;
}
);
}

所以问题是:

  • 通过 Google Drive API v3 处理下载的正确方法是什么?
  • 我需要处理响应数据的任何格式吗?

非常感谢所有帮助!谢谢

最佳答案

  • 您想要使用 googleapis 和 Node.js 从 Google 云端硬盘下载文件。
  • 您已经能够使用 Drive API。

如果我的理解是正确的,这个答案怎么样?

模式 1:

在此模式中,arraybuffer 用于 responseType

示例脚本:

const drive = google.drive({ version: "v3", auth });
var fileId = '###'; // Please set the file ID.
drive.files.get(
{
fileId: fileId,
alt: "media"
},
{ responseType: "arraybuffer" },
function(err, { data }) {
fs.writeFile("sample.jpg", Buffer.from(data), err => {
if (err) console.log(err);
});
}
);
  • 在本例中,使用 Buffer.from()

模式 2:

在此模式中,stream 用于 responseType

示例脚本:

const drive = google.drive({ version: "v3", auth });
var fileId = '###'; // Please set the file ID.
var dest = fs.createWriteStream("sample.jpg");
drive.files.get(
{
fileId: fileId,
alt: "media"
},
{ responseType: "stream" },
function(err, { data }) {
data
.on("end", () => {
console.log("Done");
})
.on("error", err => {
console.log("Error during download", err);
})
.pipe(dest);
}
);

注意:

  • 如果出现错误,请使用最新版本的 googleapi。
  • 从您的问题来看,您似乎已经能够根据您的请求检索到您要下载的文件,但文件内容无法打开。但如果出现错误,请尝试在请求中添加 supportsAllDrives: true 和/或 supportsTeamDrives: true

引用文献:

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

关于node.js - 从 Drive API v3 下载图像不断会出现损坏的图像。我应该如何解码 promise 的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59026661/

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