我正在使用puppeteer下载大量文件,但是我需要在下载完成之前或之后知道每个文件的名称。监视文件夹中的文件更改并不能解决我的问题,原因是许多进程同时下载文件,并且现在有匹配它们的方法。
我一直在尝试为每个文件设置下载的自定义路径,但是Puppeteer做的事情很奇怪,有些下载到该文件夹,而其他下载到/ Downloads。
因此,我想知道是否存在一种在下载之前知道名称或在下载之前设置文件名称的方法。这样我就可以通过代码正确匹配它。
注意:文件是通过JS下载的,即单击按钮时。由于文件是自动生成的,因此无法通过抓取来了解文件名。
答案 0 :(得分:4)
如果下载是由页面触发的,则可以使用Content-Disposition
标头完成此操作。标头很可能还会在标头中包含文件名。
示例
下面是标题的示例:
Content-Disposition: attachment; filename="name_of_download.ext"
因此,为了读取文件名,您可以通过查看response.headers()
来签出文件名。在下面的示例中,我在此之后使用正则表达式提取文件名:
const contentDisposition = response.headers()['content-disposition'];
const matchFilename = contentDisposition.match(/filename="(.*)"/);
if (matchFilename) {
const filename = matchFilename[1];
}
非ASCII字符
根据要下载的文件,您可能还想查看有关非ASCII文件名编码的stackoverflow answer。