gpt4 book ai didi

node.js - 通过驱动器 api 上传时,Base64 字符串 img 不可见

转载 作者:行者123 更新时间:2023-12-02 03:08:48 24 4
gpt4 key购买 nike

我已通过 Node Express 中的 API 将 Base64 img 字符串上传到 Google Drive。上传图片后,在云端硬盘中无法查看该图片。我不确定如何解决此格式问题。我知道我可以先在本地保存 img,然后上传保存的 img 文件,但我希望有一种更简单的方法。

我的代码:

 const uploadImg = async (folderId,img)=>{


process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0


const scopes = [
'https://www.googleapis.com/auth/drive'
];
const auth = new google.auth.JWT(
demoApiCreds.client_email, null,
demoApiCreds.private_key, scopes
);

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

const fileMetadata = {
'name': 'Client_Design_ScreenShotTest',
'mimeType':'image/jpeg',
'parents':[folderId]
};


const uploadImg = img.split(/,(.+)/)[1];

const media = {
body: uploadImg
}

let res = await drive.files.create({
resource: fileMetadata,
media: media,
fields: 'id',
});
console.log('the response is',res);
console.log('the data is ',res.data);
return res.data;

}

编辑:

The file is stored in drive, as a jpg, but the img is blank and after the img is clicked google drive complains that the file cannot be read. The img is still blank after downloading.

base 64 img 字符串是

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhAAAADqCAYAAADzlnzfAAAAAXNSR0I...

按照其他线程中的建议,我在上传之前删除了 data:image/png;base64。无论有或没有此前缀,它都会失败。

最佳答案

  • 您想要使用 googleapis 和 node.js 将图像上传到 Google 云端硬盘。
  • img的图像是base64数据。
  • 您已经能够使用 Drive API 将文件上传和下载到 Google 云端硬盘。

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

修改点:

  • 不幸的是,当使用googleapis上传base64数据时,base64数据没有被解码并且数据作为文本数据上传。所以当你看到上传的文件时,你看不到它的图像。如果请求体中的base64数据头可以添加Content-Transfer-Encoding: base64,则将base64数据转换为图片上传。但使用googleapis时,现阶段还无法实现。

为了将图像编码的base64数据作为图像上传到Google Drive,下面的修改如何?

修改后的脚本:

在本次修改中,base64图像被转换为​​流类型,并上传。请按如下方式修改您的脚本。

从:
const uploadImg = img.split(/,(.+)/)[1];

const media = {
body: uploadImg
}
到:
const stream = require("stream"); // Added

const uploadImg = img.split(/,(.+)/)[1];
const buf = new Buffer.from(uploadImg, "base64"); // Added
const bs = new stream.PassThrough(); // Added
bs.end(buf); // Added

const media = {
body: bs // Modified
};

注意:

  • 即使在 fileMetadata 中使用 'mimeType':'image/jpeg',图像文件也会以 image/png 的形式上传。但例如,如果在 fileMetadata 中使用 'mimeType':'application/pdf',则图像文件将上传为 application/pdf。请小心这一点。所以我还建议修改为 'mimeType':'image/png'10100111001's answer所述.
  • 在“[email protected] ”处,resource: fileMetadatarequestBody: fileMetadata 两种模式均有效。

引用文献:

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

关于node.js - 通过驱动器 api 上传时,Base64 字符串 img 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58251141/

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