将文件和内容从数据库下载到客户端



我想在来自dir的相同请求文件和来自DB的一些内容中发送到客户端。

DB查询-const derivatives = await Derivative.findAll();

这是res-

res.status(200).send({
data: derivatives.map((derivative) => ({
id: derivative.id,
date: derivative.date,
})),
});

这是下载-

const fileName = derivatives.map((name) => name.wex);
res.status(200).download(__dirname, `/assets/${fileName}`);

我该如何将其添加到我的回复中?

HTTP允许您指定一个;内容处置";要指示响应是否应被视为下载,但不支持任意发送下载,它必须是对请求的响应。对于一个请求,你不能让一部分响应是下载,另一部分不是。

因此,如果您需要下载一个文件,并且需要一些JSON来显示一些UI,那么您需要在客户端中以某种方式进行处理。任一:

  • 客户端发送请求,服务器返回JSON,其中包含下载的URL以及您想要发送的其他数据,然后客户端通过JavaScript请求下载URL
  • 客户端发送两个请求,一个用于下载,另一个用于其他数据;如果您需要关联两个请求(例如,只想进行一次数据库查找(,这可能会使服务器上的事情复杂化,但在客户端上最简单
  • 客户端发送一个请求,服务器返回一个包含JSON数据和文件数据的响应,以某种方式打包(文件数据可能在JSON中,但这将是低效的(,并在客户端上解包(使用JavaScript(,然后客户端构造一个Blob URL以";下载";(在这种情况下,数据已经下载,所以这只需要保存一个文件(

有很多方法可以将文件和JSON数据打包在一起,这正是/u/Quentin所暗示的。将两者作为一个响应发送可能会更好地提高性能,但您可能不需要。

最新更新