Итак, я загружаю файлы с помощью потока Ax ios, заархивирую их архиватором, а затем хочу загрузить zip в корзину s3. Сначала я сохранил zip в локальном каталоге, так все работало нормально. Я использовал multipipe lib для объединения потоков. Объедините zip-поток архиватора с fs.createWriteStream
function uploadFromStream(name) {
const output = fs.createWriteStream(__dirname + `/${name}.zip`);
const zip= combine(archive, output);
return zip
}
На вершине ios end
zip.append(response.data.pipe(new PassThrough()), { name: name });
Все работает как положено, Zip сохраняется со всеми файлами в нем.
Затем я исследовал и искал, как загрузить в s3 с помощью потока. Я нашел этот способ. Передать поток в s3.upload ()
inputStream .pipe (uploadFromStream (s3));
function uploadFromStream(s3) {
var pass = new stream.PassThrough();
var params = {Bucket: BUCKET, Key: KEY, Body: pass};
s3.upload(params, function(err, data) {
console.log(err, data);
});
return pass;
}
Я реализовал это с помощью такого архиватора.
function uploadFromStream(bucket, destination) {
var pass = new stream.PassThrough();
var params = { Bucket: bucket, Key: destination, Body: pass };
S3.upload(params, function (err, data) {
console.log(err, data);
});
const s3Stream = combine(archive, pass);
return s3Stream;
}
Теперь, когда я пытаюсь добавить, я получаю сообщение об ошибке «Добавить не функцию», когда finalize не является функцией. Когда я проверял, я обнаружил, что s3Stream.append и s3Stream.finalize не определены. Я не думаю, что это должно произойти, но я полагаю, что PassThrough удаляет функции из объединенного потока.
И такие потоки конвейера, как этот, также не работали.
return archive.pipe(pass);