import * as streamsPolyfill from 'web-streams-polyfill/ponyfill';
import streamSaver from 'streamsaver';
if (!streamSaver.WritableStream) {
streamSaver.WritableStream = streamsPolyfill.WritableStream; // Add polyfill for WritableStream
}
export default class DownloadService {
public async download(readableStream: ReadableStream<Uint8Array> | null, realFileName: string) {
if (!readableStream) {
return;
}
const fileWritableStream = streamSaver.createWriteStream(realFileName);
if (window.WritableStream && readableStream.pipeTo) {
return readableStream.pipeTo(fileWritableStream);
}
return new Promise((resolve) => DownloadService.writeStream(readableStream, fileWritableStream, resolve));
}
public async getReadableStream(link: string, headersProps?: HeadersInit) {
// headers generation here
return await fetch(link, {
method: 'GET',
headers,
});
}
private static writeStream(readableStream: ReadableStream, writableStream: WritableStream, onSuccess: () => void) {
const reader = readableStream.getReader();
const writer = writableStream.getWriter();
const writeChunkRecursively = () => {
reader.read().then((readResult) => {
readResult.done ? writer.close().then(onSuccess) : writer.write(readResult.value).then(writeChunkRecursively);
});
};
writeChunkRecursively();
}
}
This code works fine, but in incognito mode (Chrome) streamSaver reject promise with Uncaught (in promise) DOMException: Failed to get a ServiceWorkerRegistration: The user denied permission to use Service Worker. https://jimmywarting.github.io/StreamSaver.js/mitm.html?version=2.0.0 (see screenshot) and file doesn't download.
Use
streamSaver
like inblob/file
example:This code works fine, but in incognito mode (Chrome) streamSaver reject promise with
Uncaught (in promise) DOMException: Failed to get a ServiceWorkerRegistration: The user denied permission to use Service Worker. https://jimmywarting.github.io/StreamSaver.js/mitm.html?version=2.0.0
(see screenshot) and file doesn't download.Reproduced on http and on https too.
"streamsaver": "2.0.5"
"web-streams-polyfill": "3.0.0"