javascript - 使用 Google Drive API 创建文件时,文件内容为空
问题描述
我正在开发节点 js 应用程序,该应用程序通过用户 ID(使用 pdfkit)创建 pdf,填充用户数据,然后使用 Google Drive API 上传到 Google Drive。客户端正在获取此文件的 URL。我的问题是,当我上传一次时,它可以完美运行。但是当我再次尝试时,文件上传但它是空的。如果我重新启动服务器,它会再次工作。
第二次尝试创建 Pdf 也很好,唯一的问题是第二次创建/上传。我曾尝试使文件名动态化,但这没有帮助。只有服务器重启有效。谢谢你。
创建pdf的功能
const createPdf = async (req, res, missions) => {
try {
const { _id } = req.user;
const pdfPath = path.join('data', 'pdf', _id + '.pdf');
let doc = new PDFDocument({ margin: 50 });
doc.pipe(fs.createWriteStream(pdfPath));
generateInnerPdf(doc, missions);
doc.end();
return { success: true };
} catch (err) {
return { success: false };
}
};
在谷歌驱动器上上传和检索网址的功能
exports.uploads = (_id) => {
return new Promise((resolve) => {
const auth = new google.auth.JWT(
credentials.client_email,
null,
credentials.private_key,
scopes
);
const drive = google.drive({ version: 'v3', auth });
var folderId = 'xxxxxxxxxxx';
const pdfPath = path.join('data', 'pdf', _id + '.pdf');
var fileMetadata = {
name: `${_id}.pdf`,
parents: [folderId],
};
var media = {
mimeType: 'application/pdf',
body: fs.createReadStream(pdfPath),
};
drive.files.create(
{
resource: fileMetadata,
media: media,
fields: 'id',
},
(error, result) => {
resolve({
fileUrl: `https://drive.google.com/file/d/${result.data.id}/view?usp=sharing`,
});
}
);
});
};
我的 pdf 控制器
exports.create = async (req, res) => {
try {
const { missions } = await getMissions(req.user._id);
const { success } = await createPdf(req, res, missions);
if (success) {
googleApi.uploads(req.user._id).then((result) => {
res.status(200).send(result);
});
} else {
res.status(422).send(err);
}
} catch (err) {
console.log(err);
res.status(422).send(err.message);
}
};
编辑:当我再次解决承诺时应该是一个问题吗?
解决方案
设置超时时修复
if (success) {
setTimeout(function () {
googleApi.uploads(req.user._id).then((result) => {
res.status(200).send(result);
});
}, 500);
推荐阅读
- c++ - 我应该如何实现现有父对象的临时子对象?
- sql-server - OPTIMIZE_FOR_SEQUENTIAL_KEY 打破 VS2019 数据库项目构建
- laravel - Laravel - 如何动态实现我的 API
- python - 检查值按行计数,它小于另一个列值
- github - 如何让 GitHub 返回实际文件(未显示在 Git 查看器中)?
- npm - 尝试 npm install material-ui 时出现大量错误
- reporting-services - 在 SSRS 的 where 子句中使用参数
- c++ - 如何将 std::function 作为参数传递给 gmock 中的模拟方法?
- snakemake - snakemake 执行作业的条件是什么?
- github - 在文档中的任何位置转换 github 页面上的字符串