Загрузка нескольких файлов не загружает все файлы в Firefox, проблема с кликом привязки - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь загрузить несколько файлов, используя машинописный текст на угловом 6, Из службы веб-API я получаю массив больших двоичных объектов.

Сервис для получения нескольких блобов, которые мне нужны для загрузки файлов:

 private downloadTest(): void {
    this.downloadService$().subscribe((blobs: Blob[]) => {
        blobs.forEach((blob: Blob, index: number) => {
            FileDownloader.startDownload(blob);
        });
    });
}

В цикле я вызываю метод startDownload для загрузки файла:

  export class Downloader {
        public static startDownload(blob: Blob): void {
            blob = new Blob([blob], { type: "type of file" });
            const url = window.URL.createObjectURL(blob);
            const anchor = document.createElement("a");
            document.body.appendChild(anchor);
            anchor.download = "fileName";
            anchor.target = "_blank";
            anchor.href = url;        
            anchor.click();
            document.body.removeChild(anchor);
            window.URL.revokeObjectURL(url);
    }    
}

Приведенный выше код работает нормально в Chrome, но в Firefox, когда щелчок привязки выполняется, он прерывает цикл, а остальная часть файла не загружается,

Когда я удалил anchor.download = "fileName"; он также загрузит файл в Firefox, но откроет и закроет новую вкладку. Кроме того, имя файла будет случайным.

Я много чего пробовал, но ничего не получалось.

Я просто хотел скачать файл как другой файл в цикле с указанным именем файла.

Заранее спасибо.

С уважением, Радж Шарма

1 Ответ

0 голосов
/ 17 апреля 2019

Я испробовал много подходов к работе в Firefox, и, наконец, я установил и увеличил таймаут для каждого Downlaod, чтобы одна загрузка не влияла на другую загрузку.Может быть, это поможет кому-то.

private downloadTest(): void {
    this.downloadService$().subscribe((blobs: Blob[]) => {
 let intervalTimeOut = 0;
                blobs.forEach(function (blob, index): void {
                    setTimeout(function (): void {
                        startDownload(blob, fileInfos[index]);
                    }, intervalTimeOut += 100);
                });
    });
}
...