Jon*_*vis 2 file-upload node.js google-drive-api
我已通过 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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
该文件以 jpg 形式存储在驱动器中,但 img 是空白的,单击该 img 后,谷歌驱动器抱怨无法读取该文件。下载后img还是空白。
以 64 为基数的 img 字符串是
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhAAAADqCAYAAADzlnzfAAAAAXNSR0I...
Run Code Online (Sandbox Code Playgroud)
按照其他线程中的建议,我在上传之前删除了 data:image/png;base64 。无论有或没有此前缀,它都会失败。
img
是base64数据。如果我的理解是正确的,这个答案怎么样?请将此视为多个答案之一。
Content-Transfer-Encoding: base64
可以添加到请求正文中的base64数据的标头中,则将base64数据转换并作为图像上传。但是当使用googleapis时,现阶段还无法实现。为了将图像编码的base64数据作为图像上传到Google Drive,下面的修改如何?
在本次修改中,将base64图像转换为流类型并上传。请按如下方式修改您的脚本。
从:const uploadImg = img.split(/,(.+)/)[1];
const media = {
body: uploadImg
}
Run Code Online (Sandbox Code Playgroud)
到:
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
};
Run Code Online (Sandbox Code Playgroud)
'mimeType':'image/jpeg'
使用 at fileMetadata
,图像文件也会上传为image/png
. 但例如,如果'mimeType':'application/pdf'
使用 at fileMetadata
,则图像文件将上传为application/pdf
. 请小心这一点。所以我也建议修改为10100111001的答案'mimeType':'image/png'
中提到的。resource: fileMetadata
在“googleapis@43.0.0”,和的模式都requestBody: fileMetadata
有效。如果我误解了你的问题并且这不是你想要的方向,我很抱歉。
归档时间: |
|
查看次数: |
3271 次 |
最近记录: |