gpt4 book ai didi

Node.js - 将多个文件作为附件从服务器推送到客户端

转载 作者:搜寻专家 更新时间:2023-11-01 00:50:02 24 4
gpt4 key购买 nike

我有一个应用程序,它允许用户在文本输入框中输入多个文件名,并在提交时从 SFTP 服务器获取这些文件名并返回给客户端并下载。

应用看起来像这样:

Application

POST 请求的代码如下所示:

// Declare variables.
var files = req.body.input;
var i = 0;

// Check if request body is an array or single value.
if ( Array.isArray(files) ) {

// Loop through the array of file names.
function myLoop() {
setTimeout(function() {

// Declare the files remote and local paths as variables.
var remoteFilename = '../mnt/volume_lon1_01/test/files/processed/' + files[i] + '.csv.gz';
var localFilename = files[i] + '.csv.gz'

// Use the SFTP Get command to get the files.
sftp.get(remoteFilename).then((stream) => {

// Pass the file back to the client side for download.
res.set('content-disposition', `attachment; filename="${ localFilename }"`);
stream.pipe(res);
});

// Increment the counter.
i++;

}, 200)
}
myLoop();

} else {

// If the request body is a single value, declare the files remote and local path as a variable.
var remoteFilename = '../mnt/volume_lon1_01/test/files/processed/' + files + '.csv.gz';
var localFilename = files[i] + '.csv.gz'

// Use the SFTP Get command to get the files.
sftp.get(remoteFilename).then((stream) => {

// Pass the file back to the client side for download.
res.set('content-disposition', `attachment; filename="${ localFilename }"`);
stream.pipe(res);
});
}

})

我的问题是:如何从服务器端代码向客户端发送多个文件以供下载?

我在这里看到这个问题:Sending multiple files down the pipe但给出的答案并没有真正详细说明解决方案。我知道我的代码永远不会适用于多个文件,我只是附上它作为展示我到目前为止所拥有的东西的一种方式。它适用于下载 1 个文件,但仅此而已,因为根据我对服务器知识有限的了解, header 只发送一次,因此我无法循环设置文件名并一个一个地发送它们。

Mscdex 在我链接到的问题中的回答解释了:

There is no way to send multiple files like that in a single response, unless you use your own special formatting (standard multipart or otherwise) and then parse that on the client side (e.g. via XHR).

有人可以解释并演示“使用您自己的特殊格式意味着什么”吗,老实说,我一点头绪都没有。

此外,我想尽可能避免压缩文件。

非常感谢,G

最佳答案

“使用您自己的特殊格式” 是一个可能 可行的解决方案,但它是一个非标准解决方案,还需要自定义客户端(浏览器) 代码来完成它。我会反对它,并使用下一个最好的方法:创建一个 ZIP 文件。

或者,在客户端代码中,您可以包装每个 <input>在自己的<form> ,并在按下提交按钮时,使用一些 JS 代码来提交所有这些表单。在这种情况下,每个表单都会触发一次下载,因此服务器端代码就是 else。 block 。

关于Node.js - 将多个文件作为附件从服务器推送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53409573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com