我有一个nodejs示例在Azure Function应用程序中运行。使用Puppeteer,我可以浏览网站并下载文件。
我使用node os和tmpdir()创建了一个路径,如this answer和以下代码片段所示:
const downloadPath = path.join(os.tmpdir(), '/downloads/');
我使用context.log确认路径与预期一致:
context.log('Download path: ' + downloadPath);
返回Download path: /tmp/downloads/
我用下一个代码片段创建目录:
if (!fs.existsSync(downloadPath)) {
fs.mkdirSync(downloadPath, { recursive: true });
}
然后我有一个函数,它监视该文件夹,并在文件添加到该文件夹时返回文件名:
async function watchFolderForFile(ctx) {
return new Promise((resolve, reject) => {
const watcher = fs.watch(downloadPath, async (eventType, fileName) => {
ctx.log('watching folder');
if (eventType === 'rename') {
// A file has been added
watcher.close();
resolve(fileName);
}
});
// Handle errors
watcher.on('error', async (err) => {
watcher.close();
reject(err);
});
});
}
这一切都很好,我可以看到文件现在作为/tmp/downloads/DonationsReport-CharityId-2956110-from-2022-01-01-to-2022-01-31.Csv.crdownload的串联字符串存在
但是当我调用文件读取它时,我得到一个错误,该文件不存在。我应该做什么不同的事情,因为它是在Azure函数应用程序中?
1条答案
按热度按时间xqk2d5yq1#
经过几个小时的尝试和错误,我能够解决这个问题。由于Azure Function应用程序是在Linux环境中运行的,文件夹结构不同,
os.tmpdir()
将无法工作。我能够使用/home/
目录存储和检索文件。希望这对以后的人有帮助!