前端base64转换工具(base64转文件,base64转图片)-程序员宅基地

技术标签: 前端  javascript  开发语言  

<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>base64转文件</title>

</head>

<body>
	<form id="submitForm" name="submitForm" method="post">
	<div>
        <a class="down" href=""></a>
    </div>
	<textarea rows="50" id="base64" name="base64" cols="100"></textarea>
	<br/>
	文件格式<select id="fileType" name="fileType">
		<option value="pdf">pdf</option>
		<option value="png">png</option>
		<option value="jpg">jpg</option>
		<option value="zip">zip</option>		
	</select>
	<br/>
	文件名称<input type="text" name="fileName" id="fileName" />
	<br/>
	<button onclick="downloadFile()">下载文件 </button>
	</form>
	
</body>
<script>

    function myFunction() {
      
        let base64 = 'data:image/png;base64,base64编码图片内容';
        function dataURLtoBlob(dataurl) {
      
            var arr = dataurl.split(','),
                mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]),
                n = bstr.length,
                u8arr = new Uint8Array(n);
            while (n--) {
      
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], {
       type: mime });
        }
        //调用
        let blob = dataURLtoBlob(base64);
        let link = document.createElement('a')
        link.download = 'abc.png' // 要下载的文件名
        link.href = URL.createObjectURL(blob);
        // 触发点击
        document.body.appendChild(link);
        link.click();
        // 然后移除
        document.body.removeChild(link);
    }

    /**
       * desc: base64对象转blob文件对象
       * @param urlData  :数据的base64对象
       * @param type  :类型 png,pdf,doc,mp3等;
       * @returns {Blob}:Blob文件对象
       */
    function base64ToBlob(urlData, type) {
      
        let arr = urlData.split(',');
        let array = arr[0].match(/:(.*?);/);
        let mime = (array && array.length > 1 ? array[1] : type) || type;
        // 去掉url的头,并转化为byte
        let bytes = window.atob(arr[1]);
        // 处理异常,将ascii码小于0的转换为大于0
        let ab = new ArrayBuffer(bytes.length);
        // 生成视图(直接针对内存):8位无符号整数,长度1个字节
        let ia = new Uint8Array(ab);
        for (let i = 0; i < bytes.length; i++) {
      
            ia[i] = bytes.charCodeAt(i);
        }
        return new Blob([ab], {
      
            type: mime
        });
    }

    /**
     * desc: 下载导出文件
     * @param blob  :返回数据的blob对象或链接
     * @param fileName  :下载后文件名标记
     * @param fileType  :文件类 word(docx) excel(xlsx) ppt等
     */
    function downloadExportFile(blob, fileName, fileType) {
      
        let downloadElement = document.createElement('a');
        let href = blob;
        if (typeof blob == 'string') {
      
            downloadElement.target = '_blank';
        } else {
      
            href = window.URL.createObjectURL(blob); //创建下载的链接
        }
        downloadElement.href = href;
        downloadElement.download = fileName + '.' + fileType; //下载后文件名
        document.body.appendChild(downloadElement);
        downloadElement.click(); //触发点击下载
        document.body.removeChild(downloadElement); //下载完成移除元素
        if (typeof blob != 'string') {
      
            window.URL.revokeObjectURL(href); //释放掉blob对象
        }
    }

    /**
     * desc: base64转文件并下载
     * @param base64 {String} : base64数据
     * @param fileType {String} : 要导出的文件类型png,pdf,doc,mp3等
     * @param fileName {String} : 文件名
     */
    function downloadFile(base64, fileName, fileType) {
      
        let typeHeader = 'data:application/' + fileType + ';base64,' // 定义base64 头部文件类型
        let converedBase64 = typeHeader + base64;  // 拼接最终的base64
        let blob = base64ToBlob(converedBase64, fileType)  // 转成blob对象
        downloadExportFile(blob, fileName, fileType) // 下载文件
    }

	/**
	*/
    function downloadFile() {
      
		var base64 = document.getElementById("base64").value;
		var fileName = document.getElementById("fileName").value;
		var fileType = document.getElementById("fileType").value;
        downloadFile(base64,fileName,fileType);
    }
</script>

</html>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuyongheng1991/article/details/125129260

智能推荐

初识Mongdb之数据插入篇_mongotemplate.insert 如果表不存在-程序员宅基地

文章浏览阅读2.7k次,点赞9次,收藏8次。目录数据插入数据之源数据导入数据插入方法面向编程插入命令行导入数据脚本多个集群启动(自启动不推荐)小故事(点击查看)数据插入数据之源我们在实际的开发应用之中,数据到底从何而来,是已经准备好的数据源吗?当然不是,如果没有数据就需要你自己去收集(数据挖掘),利用爬虫来解决,最后存储到数据库(MySQL,mongdb,Redis,pandas......),充分利用这些数据库来操作数据,可以达到事半功倍的效果。对于本专栏使用是的数据是随机生成的数据源,便于我们日常学_mongotemplate.insert 如果表不存在

P1918 保龄球_p1918c++-程序员宅基地

文章浏览阅读186次。`map`_p1918c++

基于单片机的加热炉炉温控制系统设计-程序员宅基地

文章浏览阅读3.5k次,点赞7次,收藏41次。但由于输出控制量只有两种状态,使被控参数在两个方向上变化的速率均为最大,因此容易引起反馈回路产生振荡,对自动控制加热炉炉温控制系统会产生十分不利的影响,甚至会因为输出开关的频繁动作而不能满足加热炉炉温控制系统对控制精度的要求。但随着计算机与超大规模集成电路的迅速发展,以现代控制理论和计算机为基础,采用数字控制、显示、A/D与D/A转换,配合执行器与控制阀构成的计算机控制加热炉炉温控制系统,在过程控制过程中得到越来越广泛的应用。由于炉温控制加热炉炉温控制系统的控制对象具有惯性大,连续性的特点。_基于单片机的加热炉炉温控制系统设计

Oracle-----约束简介&非空约束&唯一约束&主键约束-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏4次。上一篇????:Oracle-----为表重命名&数据表删除&闪回技术&修改表结构文章目录1、约束简介2、非空约束(not null、nk)2.1 范例1:使用非空约束2.2 范例2:正确地增加语句2.3 范例3:错误地增加语句3、唯一约束(unique、uk)3.1 范例1:使用唯一约束3.2 范例2:正确地增加语句3.3 范例3:错误地增加语句3.4 范例4:查询user...

CamVid数据集(智能驾驶场景的语义分割)_camvid数据集11类别-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏7次。前言CamVid 数据集是由剑桥大学公开发布的城市道路场景的数据集。CamVid全称:The Cambridge-driving Labeled Video Database,它是第一个具有目标类别语义标签的视频集合。数据集包 括 700 多张精准标注的图片用于强监督学习,可分为训练集、验证集、测试集。同时, 在 CamVid 数据集中通常使用 11 种常用的类别来进行分割精度的评估,分别为:道路 (Road)、交通标志(Symbol)、汽车(Car)、天空(Sky)、行人道(Sidewalk)、电_camvid数据集11类别

ESP32 LVGL8.1 实现太空人显示(29)_lv_img_declare-程序员宅基地

文章浏览阅读8.7k次,点赞11次,收藏90次。文章目录一、ESP32 LVGL工程配置1.1从库中下载LVGL代码1.2配置适合ESP32 液晶屏1.3编译下载测试二、GIF图片处理2.1下载gif图片2.2将gif图片按照帧率导出成图片2.lvgl animimg对象实现图片的播放1.3下载测试 注:本博客作为学习笔记,有错误的地方希望指正一、ESP32 LVGL工程配置首先要通过液晶屏显示太空人,我们这里主要有两种方式可以实现,第一种直接使用厂家只带的液晶屏幕驱动去实现图片的显示,另外使用其他的GUI提供的控件去实现,嵌入式常见的GUI挺多_lv_img_declare

随便推点

阿里云服务器使用教程_新手入门超详细一看就懂_阿里云服务器教程-程序员宅基地

文章浏览阅读8.2k次,点赞12次,收藏201次。阿里云服务器使用教程包括云服务器购买、云服务器配置选择、云服务器开通端口号、搭建网站所需Web环境、安装网站程序、域名解析到云服务器公网IP地址,最后网站上线全流程,阿小云分享阿里云服务器详细使用教程_阿里云服务器教程

浏览器复制粘贴以及手机端webview复制粘贴_华为手机webview 粘贴无数据-程序员宅基地

文章浏览阅读6.1k次,点赞4次,收藏4次。一、浏览器赋值粘贴1、document.execCommand这部分参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/execCommand咱们再浏览器中使用的复制大部分都是用的这个原理2、例子://这是一个点击方法,放到复制按钮上即可 function copyArticle1() { cons..._华为手机webview 粘贴无数据

Boost中ASIO的一些用法-定时器_boost asio不编译可以用吗-程序员宅基地

文章浏览阅读2.1k次。一、介绍ASIO,基于操作系统的异步机制,可有效避免多线程编程的诸多副作用。目前主要关注于通信方面,使用大量的类封装了socket,提供更高层次的接口二、使用不需要编译,默认不支持SSL,要支持的话需要自己编译OpenSSL。三、用法Sample1、定时器#include #include #include using namespace bo_boost asio不编译可以用吗

c语言编程实现strlen,C语言::模拟实现strlen函数(示例代码)-程序员宅基地

文章浏览阅读750次。编写一个C语言程序模拟实现strlen函数.算法strlen函数功能是计算字符串中字符的个数.(除\0外)而字符串本身就是一个字符数组,只不过末尾以\0结束.因此,我们只需遍历除\0之外的所有字符即可.有三种方法可以解决这个问题.算法总结方法一:设置一个整型计数器,遍历字符串.方法二:通过不断函数自身的递归.方法三:与方法一类似,设置一个char*变量标记字符串尾部,通过指针相减得到字符长度.核心..._c语言实现strlen

P74-前端基础项目开发-首页main部分开发广告栏-项目完整代码_首页广告开发-程序员宅基地

文章浏览阅读904次。P74-前端基础项目开发-首页main部分开发广告栏-项目完整代码1.概述这篇文章是首页开发最后一个部分,也是这个项目的结束部分。通过这个项目练习让我们掌握了HTML+CSS的基础使用。2.广告栏2.1.广告栏需求样式2.2.创建广告栏内容在index.html文件中创建广告栏内容 <!-- 创建广告容器 --> <div class="ad w"> <ul class="shortcut"> <li> _首页广告开发

TS流结构图_现代电视技术中解析ts包头的工作流程图-程序员宅基地

文章浏览阅读2k次。该说真正了解TS,还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。ISO/IEC-13818-1:系统部分;ISO/IEC-13818-2:视频;ISO/IEC-13818-3:音频;ISO/IEC-13818-4:一致性测试;ISO/IEC-13818-5:软件部分;ISO/IEC-138_现代电视技术中解析ts包头的工作流程图

推荐文章

热门文章

相关标签