如何在没有直接 url 的情况下使用 puppeteer 下载 csv 文件到 firebase 云函数 tmp?

How to download a csv file to firebase cloud function tmp with puppeteer without a direct url?

所以我想下载一个带有 puppeteer 的 csv,它在 firebase 云函数上运行。

由于不想持久化,所以想存放在cloud functions的tmp文件夹中。 经过一番研究,我发现访问此文件夹路径的最佳方法是调用 os.tmpdir().

所以这是我当前的功能:

const downloadPath = `${os.tmpdir()}` + '/storageFolder';
await page._client.send('Page.setDownloadBehavior', {
    behavior: 'allow',
    downloadPath: downloadPath,
});
await page.waitForTimeout(500);
await page.$eval('mybutton', (mybutton) => mybutton.click());
await page.waitForTimeout(1000);

但是当我再次检查这个路径时,${os.tmpdir()}` + '/storageFolder'

中没有文件

至少当我这样做时:

fs.readdirSync(downloadPath).forEach(file => {
    console.log("Filename", file);
});

没有任何内容打印到控制台。

我知道有很多关于此的问题,但每个接受的答案都是从 url 下载文件,但在我的情况下,无法获得 url.

那么为什么指定的文件夹中没有文件呢?我做错了什么?

你能把文件存储在云存储中吗,云函数是无状态的吗?另外,我可以看到您正在使用超时,这可能会导致计时问题。

我想知道您是否可以使用不需要使用 puppeteer 的解决方案:/

我让它工作了,至少在本地。

我把下载路径改成了

 const downloadPath = `${os.tmpdir()}\downloads`;

看来我做的方式不对