Проблема

Я хочу загрузить большое изображение на стороне клиента, представленное в виде строки base64. Существующие решения, которые я нашел, состояли примерно из следующего:

const downloadFile = (base64, filename) => {
  const a = document.createElement("a");
  a.href = `data:image/png;base64,${base64}`;
  a.download = `${filename}.png`;
  a.click();
}

Теперь, хотя это работает для небольших изображений, у меня был вариант использования, когда мне нужно было загрузить файлы изображений размером более 50 МБ с клиента. К сожалению, этот метод ограничен файлами размером менее 2 МБ, иначе вы получите сетевую ошибку.

Решение — загрузчик больших файлов

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

Шаги

Установите пакет.

npm install large-file-downloader

Импорт и использование. Полные инструкции по интеграции можно найти в проектах README.md. С источником можно ознакомиться здесь.

import downloadFile from 'large-file-downloader';

downloadFile(base64String, fileName);

Пример html2canvas

Мой вариант использования генерировал большие изображения с помощью html2canvas. Вот полная асинхронная реализация создания холста и загрузки результата.

const canvas = await html2canvas(document.getElementById('my-element'));
await downloadFile(canvas.toDataURL('image/png'), 'test.png');