如何下载base64编码的图像?

IT技术 javascript html image base64
2021-03-02 18:06:55

我有一个来自服务器的 base64 编码图像,我想通过 JavaScript 强制下载该图像。有可能吗?

6个回答
  1. 如果您想使用 JavaScript(没有任何后端)下载它,请使用:

    window.location.href = 'data:application/octet-stream;base64,' + img;
    

    img你的 base64 编码图像在哪里

  2. 如果要允许用户指定文件名,请使用标签download属性a

    <a download="FILENAME.EXT" href="data:image/png;base64,asdasd...">Download</a>
    
    • 注意:非常旧的浏览器不支持下载属性
只需在2.解决方案中编辑a标签并添加id="d"然后调用document.getElementById("d").click();
2021-04-18 18:06:55
windows.location.href 不下载图像而是显示所有文本
2021-05-11 18:06:55
谢谢,但第一个选项不会强制下载
2021-05-12 18:06:55
没有人应该使用第二个选项,它是一个非常难以使用的选项。例如,下载 1080px 编码的 jpg 文件时,它会滞后于普通计算机。
2021-05-12 18:06:55

使用 Javascript 执行此操作的简单方法...

    var a = document.createElement("a"); //Create <a>
    a.href = "data:image/png;base64," + ImageBase64; //Image Base64 Goes here
    a.download = "Image.png"; //File name Here
    a.click(); //Downloaded file

如果文件太大,如 4M 个字符,则会出错
2021-05-10 18:06:55

使用下面的函数就这么简单:

// Parameters:
// contentType: The content type of your file. 
//              its like application/pdf or application/msword or image/jpeg or
//              image/png and so on
// base64Data: Its your actual base64 data
// fileName: Its the file name of the file which will be downloaded. 

function downloadBase64File(contentType, base64Data, fileName) {
     const linkSource = `data:${contentType};base64,${base64Data}`;
     const downloadLink = document.createElement("a");
     downloadLink.href = linkSource;
     downloadLink.download = fileName;
     downloadLink.click();
}

我从 Chrome 如何获取整页屏幕截图的源代码中找到了这个解决方案。

const base64string = "";
const pageImage = new Image();
pageImage.src = 'data:image/png;base64,' + base64string;
pageImage.onload = function() {
    const canvas = document.createElement('canvas');
    canvas.width = pageImage.naturalWidth;
    canvas.height= pageImage.naturalHeight;

    const ctx = canvas.getContext('2d');
    ctx.imageSmoothingEnabled = false;
    ctx.drawImage(pageImage, 0, 0);
    console.log(canvas, pageImage)
    saveScreenshot(canvas);
}
function saveScreenshot(canvas) {
    let fileName = "image"
    const link = document.createElement('a');
    link.download = fileName + '.png';
    console.log(canvas)
    canvas.toBlob(function(blob) {
        console.log(blob)
        link.href = URL.createObjectURL(blob);
        link.click();
    });
};

我知道这不是你写的。我愿意相信它有效。不过实话说?创建虚拟链接,然后进行虚拟点击?看起来真的很hacky。
2021-04-20 18:06:55
@TravisBear 这里没问题:source.chromium.org/chromium/chromium/src/ +/master:third_party/...
2021-05-15 18:06:55

你可以试试这个:

    <!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Download Text File DataURL Demo</title>
        <style>
            body{ font: menu; }
        </style>
        <script src='//js.zapjs.com/js/download.js'></script>
    </head>
    <body>
        <h1>Download Text File DataURL Demo</h1>
        <main></main>
        <script>
            download("data:application/octet-stream;base64,YOUR BASE64URL", "dlDataUrlText.jpeg", "application/octet-stream;base64");
        </script>
    </body>

</html>

下载标签使用包含的脚本下载图像。

作为参考,你可以试试这个 URL:http : //danml.com/download.html

当前在 js.zapjs.com 上的攻击者可能会尝试在您的计算机上安装危险程序来窃取或删除您的信息。
2021-05-11 18:06:55