Как преобразовать пользовательский поток в читаемый поток - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть некоторый пользовательский поток (https://stuk.github.io/jszip/documentation/api_zipobject/internal_stream.html), который мне нужно преобразовать в читаемый поток или любой другой, приемлемый для хранилища Amazon S3 (https://aws -amplify.github.io / docs / js / storage # put ). Все обрабатывается на клиенте в браузере.

Проблема с JSZip заключается в том, что вы можете создавать zip-файлы асинхронно (https://stuk.github.io/jszip/documentation/api_jszip/generate_async.html или https://stuk.github.io/jszip/documentation/api_streamhelper/accumulate.html), но для сбора больших файлов требуется огромный объем памяти.

С внутренним потоком JSzip я получил куски данных, например:

zip
.generateInternalStream({type:"uint8array"})
.on('data', function (data, metadata) {
    // chunk data is always Uint8Array
    // metadata contains for example currentFile and percent, see the generateInternalStream doc.
})

Моя идея состоит в том, чтобы превратить этот поток во что-то приемлемое для S3 Storage (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property) Я предполагаю, что ReadableStream. Когда я передаю сам InternalStream, S3 не принимает его.

Таким образом, я мог бы сэкономить много памяти, используемой клиентским браузером. Сейчас для файлов размером 600 МБ библиотеке требуется около 800 МБ памяти, и она не очищается после процесса ... Возможно ли это даже в браузере?

...