Edu*_*nte 2 node.js google-drive-api
我正在尝试获取一些驱动器 pdf 文件的缓冲区,以便我可以解析它并使用数据。
我已经设法使用 async/await 和一个用 promise 包装的“drive.files.list”来获取文件名和 id。现在我需要使用文件 ID 来获取缓冲区然后读取它。
我需要的函数应该返回一个承诺,我可以等待(使用 await)完成以获得缓冲区。(当我从网站响应中获取 pdf 缓冲区时,我的解析器工作正常)
function getBuffer(drive, file) {
return new Promise((resolve, reject) => {
/////Google Auth
var jwToken = new google.auth.JWT(
key.client_email,
null,
key.private_key, ["https://www.googleapis.com/auth/drive"],
null
);
jwToken.authorize((authErr) => {
if (authErr) {
return reject([false, "Auth Error: " + authErr]);
}
});
drive.files.get({
auth: jwToken,
fileId: file.id,
alt: 'media',
supportsAllDrives: true
}, function (err, res) {
if (err) {
return reject('The API returned an error: ' + err);
};
console.log(res);
const buffer = res;
resolve(buffer);
});
});
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
var buffer = await getBuffer(drive,files[i]);
Run Code Online (Sandbox Code Playgroud)
我在“console.log(res)”中得到的输出是这样的:
... ??M?7?|???[??A????EBS]??P??r?????j?3?|?I.??i?+? KU???U?:[???,^?t??v??=}'*8??????#??s??No??-??q8E9?/f? ?(?`?j'3 "??-??? ??????[jp&???k??M??vy? In?:a???OlN??u????6 ?n???q?/Y?i4??&%??q?,??p?.ZV&n????2G??????X??Y
D],?ggb?&?N???G??NS?L?\U?^R|_f<??f*?|??]?{?3?-P?~?CS? ?t??>g?Y??#?#7Wj??=?5?????#????5]>}&v??wg??eV?^>?#?{? ???????>O?? z??{8Ij?0?B?.?Cjm?4?????????m?,????????O???fS???cE??g?3( ?G??}d^O??????7????|?H?N??; {??x?b????i]=???~??=??? <??C?? wi??'a?-??p?M?6o?????ve??+??' ...
当我尝试使用解析器 (pdf2json) 时,出现此错误:
“解析PDF时出错:流必须有数据”
提前致谢
如果我的理解是正确的,这个修改怎么样?在这个修改中,文件被下载为流类型,数据被转换到缓冲区。
drive.files.get({
auth: jwToken,
fileId: file.id,
alt: 'media',
supportsAllDrives: true
}, function (err, res) {
if (err) {
return reject('The API returned an error: ' + err);
};
console.log(res);
const buffer = res;
resolve(buffer);
});
Run Code Online (Sandbox Code Playgroud)
到:
drive.files.get(
{
auth: jwToken,
fileId: file.id,
alt: "media",
supportsAllDrives: true
},
{ responseType: "stream" },
function(err, { data }) {
if (err) {
return reject("The API returned an error: " + err);
}
let buf = [];
data.on("data", function(e) {
buf.push(e);
});
data.on("end", function() {
const buffer = Buffer.concat(buf);
console.log(buffer);
// fs.writeFile("filename", buffer, err => console.log(err)); // For testing
resolve(buffer);
});
}
);
Run Code Online (Sandbox Code Playgroud)
buffer
使用 保存到文件时fs.writeFile("filename", buffer, err => console.log(err));
,可以创建下载的文件。如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
归档时间: |
|
查看次数: |
1366 次 |
最近记录: |