У меня есть приложение, которое позволяет пользователю вводить несколько имен файлов в текстовые поля ввода, и при отправке эти имена файлов будут выбираться с SFTP-сервера, возвращаться обратно клиенту и загружаться.
Приложениевыглядит примерно так:
Код для запроса 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);
});
}
})
Мой вопрос такой:Как можно отправить несколько файлов для загрузки клиенту из этого кода на стороне сервера?
Я видел этот вопрос здесь: Отправка нескольких файлов по конвейеру , но данный ответ не даетне очень подробно решение.Я знаю, что мой код никогда не будет работать для нескольких файлов, я просто прикрепил его для демонстрации того, что у меня есть.Он отлично работает для загрузки 1 файла, но не более того, поскольку, насколько я понимаю, с ограниченными знаниями о сервере, заголовки отправляются один раз, поэтому я не могу установить имена файлов в цикле и отправлять их по одному.
Mscdex'sответ на вопрос, на который я ссылаюсь, объясняет:
Невозможно отправить несколько файлов, подобных этому, в одном ответе, если вы не используете свое собственное специальное форматирование (стандартное многочастное или иное), а затем анализируетеэто на стороне клиента (например, через XHR).
Может кто-нибудь объяснить и, возможно, продемонстрировать, что «Использование ваших собственных специальных средств форматирования», поскольку я, честно говоря, понятия не имею.
Кроме того, я хотел бы избежать архивирования файлов, если это возможно.
Большое спасибо заранее, G