То, что вы пытаетесь сделать, называется «ковровая бомба».
Она состоит в том, чтобы заполнять диск пользователя большим количеством файлов до тех пор, пока он не исчерпает пространство.
Сам по себеРиск безопасности довольно низок, даже если он может привести к сбою системы, он более скучный, чем любой опасный.
Но, тем не менее, могут быть ситуации, когда он может привести к неожиданному недостатку, как это было в случае Атака «ковер-бомба Safari» .
И, что еще важнее, это редко хороший UX, в котором множество файлов накапливается в папке загрузок вместе с другими несвязанными файлами.
Таким образом, браузеры на самом деле достаточно открыты для решения этой проблемы, и у большинства есть какая-то система, позволяющая избежать этого.
Теперь, вероятно, есть многообходных путей к этим тамперным системам, но я не чувствую, что это то, что вам нужно.
Вы спросили ", есть ли лучшее решение, чем [ваш] текущий подход ", и ответ большой ДА.
Если все ваши файлы доступны длязагрузить одним щелчком мыши, затем упаковать их в один файл для загрузки.
Вы можете сделать это, сгенерировав zip-файл из всех своих BLOB-объектов, используя одну из множества библиотек архивации или даже другой алгоритм сжатия в зависимости отВаши целевые клиенты.
const blobs = "This is a sample text that will get split in chunks of separate text files"
.split(' ')
.map((txt) => new Blob([txt]));
const zip = new JSZip();
const folder = zip.folder('some-words');
blobs.forEach((blob, i) =>
folder.file(`a-word_${i}.txt`, blob)
);
zip.generateAsync({type : "blob"})
.then(zip_blob => {
dl.href = URL.createObjectURL(zip_blob);
dl.download = "myfiles.zip";
});
<!-- using JSZip library https://stuk.github.io/jszip/ -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js"></script>
<a id="dl">download</a>