Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何下载base64编码图像?_Javascript_Html_Image_Base64 - Fatal编程技术网

Javascript 如何下载base64编码图像?

Javascript 如何下载base64编码图像?,javascript,html,image,base64,Javascript,Html,Image,Base64,我有一个来自服务器的base64编码图像,我想通过JavaScript强制下载它。有可能吗 如果要使用JavaScript(无任何后端)下载,请使用: 其中img是您的base64编码图像 如果要允许用户指定文件名,请使用a标记的download属性: <a download="FILENAME.EXT" href="data:image/png;base64,asdasd...">Download</a> 注意:非常旧的

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

  • 如果要使用JavaScript(无任何后端)下载,请使用:

    其中
    img
    是您的base64编码图像

  • 如果要允许用户指定文件名,请使用
    a
    标记的
    download
    属性:

    <a download="FILENAME.EXT" href="data:image/png;base64,asdasd...">Download</a>
    
    
    
    • 注意:非常旧的浏览器不支持下载属性
  • 您可以尝试以下方法:

        <!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>
    
    
    下载文本文件DataURL演示
    正文{font:menu;}
    下载文本文件DataURL演示
    下载(“数据:应用程序/八位字节流;base64,您的BASE64URL”、“dlDataUrlText.jpeg”、“应用程序/八位字节流;base64”);
    
    下载标签使用包含的脚本下载图像


    作为参考,您可以尝试以下URL:

    如果您在base64中已经有了它,请在base64前面添加图像标记。将其附加到元素

    png64 = "data:image/" + png64; 
    $('#downloadPNG').attr('href', png64);
    
    将下载时需要的文件名添加到
    download
    标记中

    <a download="chart.png" id="downloadPNG">Export img</a>
    
    <a href={`data:application/octet-stream;base64,${this.props.base64image}`} download={"imageName"}>Click to Download the image</a>
    
    导出img
    
    我从Chrome如何获取整页屏幕截图的源代码中找到了这个解决方案

    const base64string=“”;
    const pageImage=新图像();
    pageImage.src='数据:image/png;base64,“+base64字符串;
    pageImage.onload=函数(){
    const canvas=document.createElement('canvas');
    canvas.width=pageImage.naturalWidth;
    canvas.height=pageImage.naturalHeight;
    const ctx=canvas.getContext('2d');
    ctx.imageSmoothingEnabled=假;
    ctx.drawImage(pageImage,0,0);
    console.log(画布、页面图像)
    保存屏幕截图(画布);
    }
    函数保存屏幕截图(画布){
    让fileName=“image”
    const link=document.createElement('a');
    link.download=fileName+'.png';
    console.log(画布)
    canvas.toBlob(函数(blob){
    console.log(blob)
    link.href=URL.createObjectURL(blob);
    link.click();
    });
    };
    
    在我的React应用程序中,我从API中获取基本64幅图像,我将其存储在一个全局道具中,并在
    使用Javascript执行此操作的简单方法

    var a=document.createElement(“a”)//创造
    a、 href=“data:image/png;base64,”+ImageBase64//这里是Image Base64
    a、 下载=“Image.png”//文件名在这里
    
    a、 单击()//下载的文件
    首先:这个问题非常依赖于浏览器!我尝试了很多,所以我用这种方式来回答这个问题:

    您应该将base64数据放在IMG元素的src标记中: 然后,您可以右键单击图像,然后在以下浏览器中单击“保存图像…”(或类似内容):

    • 铬79
    • 边缘44
    • 火狐71
    • IE 11
    • 狩猎13
    同样在Android上使用Chrome和Firefox。 IE 11和Safari 13中最大的文件是23MB的PNG文件。但是Firefox和Chrome也可以处理86MB的JPEG
    var a=document.createElement(“a”)//创造
    a、 href=“data:image/png;base64,”+ImageBase64//这里是Image Base64
    a、 下载=“Image.png”//文件名在这里
    
    a、 单击()//下载的文件非常简单,只需使用下面的功能即可:

    // 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();
    }
    

    在我的Angular应用程序中,我从服务器获取基本64个文件

    在Html中:-

    <button type="button" (click)="downloadFile(fileName,base64data,fileType)"></button>
    

    我不知道现在回答这个问题是否已经晚了,但我认为更好的解决办法可能是这样

  • 从base64string创建一个文件

    const convertBase64ToFile=(base64String,文件名)=>{
    设arr=base64String.split(',');
    让mime=arr[0]。匹配(/:(.*);/)[1];
    设bstr=atob(arr[1]);
    设n=bstr.length;
    设uint8Array=新的uint8Array(n);
    而(n--){
    uint8Array[n]=bstr.charCodeAt(n);
    }
    let file=新文件([uint8Array],文件名,{type:mime});
    返回文件;
    }
    
  • 使用从npm安装

    npm install file-saver
    
  • 进口

    const{saveAs}=require('file-saver');
    ///或
    从“文件保护程序”导入{saveAs};
    
  • 使用下载文件

    const downloadsbase64data=(base64String,fileName)=>{
    让file=convertBase64ToFile(base64String,fileName);
    saveAs(文件,文件名);
    }
    


  • 如果这个答案对您有效,请将其投票并标记为正确,以帮助其他人轻松找到它

    您是否在谷歌上搜索过
    下载image base64 javascript
    ?我打赌会有有用的结果there@Pekka让我想到这里:)谢谢,但第一个选项并不强制下载Windows.location.href不是下载图像,而是显示所有文本只需编辑2中的a标记。解决方案并添加
    id=“d”
    ,然后调用
    document.getElementById(“d”)。单击()任何人都不应该使用第二个选项,这是一个很难使用的选项。例如,下载1080px编码的jpg文件时,它会滞后于普通计算机。如果文件太大,如4M字符,则会出现错误如果文件太大,如4M字符,则会出现错误,您可以尝试。尝试下载大图片@canbax可能是因为URL太长?在这种情况下,你可以试试:@KasperSeweryn,谢谢。我想我之前就发现了。如果我想下载特定的高度和宽度,我怎么能得到它。我知道这不是你写的。我愿意相信它是有效的。但是认真地创建虚拟链接,然后进行虚拟单击?看起来真的很有黑客味。@TravisBear这里没问题:目前在js.zapjs.com上的攻击者可能会试图在您的计算机上安装危险的程序来窃取或删除您的信息。这是唯一对我的情况有帮助的答案。Thanks@BuwanekaSudheera谢谢你发现它很有用
    
      downloadFile(fileName:string,data: any,fileFormat:string): void {
        const linkSource = 'data:'+fileFormat+';base64'+data;
        const downloadLink = document.createElement("a");
        downloadLink.href = linkSource;
        downloadLink.download = fileName;
        downloadLink.click();
    }
    
    npm install file-saver