JavaScript: сохранить base64 в качестве файла

У меня есть строка base64, тип файла. Тип файла может быть изображением, текстом или даже PDF. Мне нужно показать ссылку download, и когда пользователь нажимает, он должен начать загрузку как ожидаемый файл.
Вкратце, сервер отправляет мне файл как base64 string, и мне нужно сохранить его как файл в браузере. Как сохранить строку base64 как файл в браузере? Было бы лучше, если бы решение работало и на IE9.

Ответ 1

Вы можете использовать download.js.

download(base64String, filename, mimeType)

Ответ 2

Вы можете сделать это из js, чтобы загрузить pdf.

Использование:

document.location = 'data:application/pdf;base64,' + base64String

Ответ 3

Вы получаете желаемый эффект (веб-страница, показывающая ссылку, и когда пользователь нажимает кнопку, открывается диалоговое окно сохранения), когда соответствующие заголовки ответов присутствуют, когда браузер запрашивает ресурс:

Content-Disposition: attachment; имя файла = "yourfilename.extension"

Если вы получаете файл с сервера как строку base64, встроенную в ваш html, возможно, вы можете пропустить вложение и просто вставить прямую ссылку на файл на своем сервере, имея сервер, обслуживающий его для пользователя.

Связанные SO на Content-Disposition

Ответ 4

Адаптировано из https://gist.github.com/RichardBray/23decdec877c0e54e6ac2bfa4b0c512f для работы в Firefox.

downloadBase64File(contentBase64, fileName) {
    const linkSource = 'data:application/pdf;base64,${contentBase64}';
    const downloadLink = document.createElement('a');
    document.body.appendChild(downloadLink);

    downloadLink.href = linkSource;
    downloadLink.target = '_self';
    downloadLink.download = fileName;
    downloadLink.click(); 
}