我正在与 Express 合作创建一个允许下载 PDF 文件的 api。 下载工作正常,但在网络连接中完成所有“下载”之前,我看不到选择要下载的文件夹的下载窗口。
此 pdf 为 22Mb。
这是我的代码的一部分:
const filePath = path.join(__dirname, serverPath.replace(/[/\\]/g, path.sep))
const fileStream = fs.createReadStream(filePath)
fileStream
.on('error', (error) => {
next(error) // --> Send error to middleWare
})
.on('end', () => {
logger.info(`${order} - File:${pathDB.fileName} from ${filePath} correctly Downloaded`)
})
// send file in https response, "blob" type
res.setHeader('Content-Disposition', 'attachment; filename=' + pathDB.fileName)
res.setHeader('Content-Type', 'application/octet-stream')
fileStream.pipe(res)
我尝试添加内容长度但不起作用。
const stat = fs.statSync(filePath);
const fileSize = stat.size;
res.setHeader('Content-Length', fileSize); // Set the Content-Length header
我应该如何管理它以允许用户在下载所有 pdf 之前选择下载文件夹?
例如,我在AMD驱动程序网站上看到,当您单击下载响应发送200b对象时,会弹出下载窗口,当您接受时,整个文件都会被下载。 https://www.amd.com/en/support/download/drivers.html
谢谢并致以诚挚的问候
这是因为您正在尝试流式传输数据,数据会以块的形式传入并存储在客户端浏览器缓存中,然后加入,就像您从 mega.io 下载文件时的情况类似
要让您的 API 下载数据,请使用以下命令:-
res.download("pdf_name.pdf")
或者您可以使用
sendFile()
代替。它仅用于从文件发送数据,而不是从内存发送数据。因此,它不是内存密集型的,但在高上传速率期间可能是服务器 CPU 密集型的,这可能会受到限制,请检查此 -> 链接