沃梦达 / IT编程 / 前端开发 / 正文

纯javascript前端实现base64图片下载(兼容IE10+)

为了实现纯javascript前端实现base64图片下载,我们需要按照以下步骤进行操作:

为了实现纯javascript前端实现base64图片下载,我们需要按照以下步骤进行操作:

1. 将base64数据转换为Blob格式

Base64是一种将二进制数据编码成文本数据的方法,而Blob是一种数据对象集合,表示一个不可变、原始数据的类似文件对象的实体。

我们可以通过以下代码将base64数据转换为Blob格式:

function base64ToBlob(base64Data, contentType) {
    contentType = contentType || '';
    const sliceSize = 1024;
    const byteCharacters = atob(base64Data);
    const byteArrays = [];

    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        const slice = byteCharacters.slice(offset, offset + sliceSize);

        const byteNumbers = new Array(slice.length);
        for (let i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        const byteArray = new Uint8Array(byteNumbers);
        byteArrays.push(byteArray);
    }

    return new Blob(byteArrays, { type: contentType });
}

该函数首先初始化要返回的Blob对象的数据类型,然后通过使用atob函数将base64数据转换为二进制数据。接着将二进制数据分割为大小为1KB的部分,并将每个部分转换为一个Uint8Array对象。最后通过传递数据部分数组创建Blob实例。

2. 使用Blob对象生成下载链接

我们可以在浏览器中使用URL.createObjectURL来生成一个可下载的链接。以下代码用Blob对象生成下载链接:

function createDownloadLink(blob, filename) {
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');

    a.href = url;
    a.download = filename || 'download';
    a.style.display = 'none';

    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);

    window.URL.revokeObjectURL(url);
}

该函数接受Blob格式的数据和一个可选文件名作为参数,并使用window.URL.createObjectURL()方法创建一个包含Blob的URL。在创建a标签后,将a的href属性设置为用于下载Blob的URL,将download属性设置为文件名。然后将a元素添加到文档树中进行模拟点击,完成下载。最后使用window.URL.revokeObjectURL()方法释放创建的URL资源。

示例1

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Base64 to Image Download</title>
</head>
<body>
    <input type="text" id="base64Input" placeholder="Enter Base64 String">
    <button id="downloadBtn">Download</button>
</body>
<script src="app.js"></script>
</html>

JavaScript

const btn = document.getElementById('downloadBtn');
btn.addEventListener('click', () => {
    const base64Data = document.getElementById('base64Input').value;
    if (base64Data) {
        const blob = base64ToBlob(base64Data, 'image/png');
        createDownloadLink(blob, 'image.png');
    } else {
        alert('Please enter base64 data!');
    }
});

当用户单击Download按钮时,它将检索输入的Base64数据,并将其转换为Blob格式。如果数据无效,则弹出一个警告框。否则,它将使用上述的createDownloadLink函数生成可用于下载的链接。

示例2

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Download Image Button</title>
</head>
<body>
    <button id="downloadBtn" data-image="data:image/png;base64,iVBORw0KG...">Download Image</button>
</body>
<script src="app.js"></script>
</html>

JavaScript

const btn = document.getElementById('downloadBtn');
const imageBase64Data = btn.dataset.image;

btn.addEventListener('click', () => {
    const blob = base64ToBlob(imageBase64Data, 'image/png');
    createDownloadLink(blob, 'image.png');
});

当用户单击Download Image按钮时,它将从按钮的data-image属性中检索Base64数据,并将其转换为Blob格式。然后使用createDownloadLink函数生成可用于下载的链接。

本文标题为:纯javascript前端实现base64图片下载(兼容IE10+)