JS保存数据到本地文件(普通文件和excel文件)——普通文件使用blob实现(excel自己写格式)——代码详解

今天做项目,有一个页面是从后台请求数据,如果想下载,那么就手动点击下载数据,可是如果两次都从服务器请求数据,有点浪费服务器资源,所以干脆就直接把数据保存在本地浏览器,然后点击后保存到本地(前面是普通文件,如果想看excel请直接跳到后面)。

那么问题来了:怎么保存?

先贴代码:

function downLoadDataToLoc() {
        var saveDatas = getDataFromLocal("results");
        // 上面是拿到我自己的数据,数据的格式是Json字符串
        var blob = new Blob([JSON.stringify(saveDatas)], {type: 'application/json'})
        // 创建一个blob的对象,把Json转化为字符串作为我们的值
        if("msSaveOrOpenBlob" in navigator){
            // 这个判断要不要都行,如果是IE浏览器,使用的是这个,
            window.navigator.msSaveOrOpenBlob(blob, "results.txt");
        } else {    // 不是IE浏览器使用的下面的
            var url = window.URL.createObjectURL(blob)
            // 上面这个是创建一个blob的对象连链接,
            var link = document.createElement('a')
            // 创建一个链接元素,是属于 a 标签的链接元素,所以括号里才是a,

            link.href = url;    
            // 把上面获得的blob的对象链接赋值给新创建的这个 a 链接
            link.setAttribute('download', "results.txt")
            // 设置下载的属性(所以使用的是download),这个是a 标签的一个属性
            // 后面的是文件名字,可以更改
            link.click();
            // 使用js点击这个链接
        }
    }

代码效果如下图:

希望这篇文章帮助到了大家!!!!


改不完的需求,需求要求保存为excel格式,想学习怎么保存excel文件格式的同学,请看这里

首先说明我的Json格式(如果Json格式不一样,大家可以根据我的代码自己改,很简单的,我会详细介绍这个代码):

// 下面是我的Json的数据格式,注意,如果格式不同,请修改我的代码
// 可以是一个这样的字符串,但是需要大家手动格式化,使用这个函数
// json = JSON.parse(json);  但是格式化之后一定要和我的格式一样
var json ={
    "--普通人--0--朱少强的大号--2019-10-20 09:29:14--Chuckie": ["72447305"],
    "--普通人--0--朱少强的大号 的第二条--2019-10-20 11:08:37--Chuckie": ["72447305"],
    "--学生--5--QQ号,新增的--2019-10-22 14:32:57 .09683--Chuckie": ["72447305"],
    "--好人--5--QQ号,新增的--2019-10-22 14:32:57.09683--Chuckie": ["72447305"],
    "--周二测试--0--2019年10月22测试--2019-10-22 15:38:46.37403--Chuckie":[
        "72447305",
        "267525217",
        "123321",
        "123456",
        "12345"
    ],
    "--普通人--0--朱少强小号--2019-10-20 11:08:55--Chuckie": ["267525217"],
}

下面是转换的代码(直接复制保存到html中,浏览器打开就能用,亲测可用):

<!DOCTYPE html>
<html>
<head>
	<title>正则表达式</title>
	<script type="text/javascript" src="../JQUERY/jqmini.js"></script>
	<script type="text/javascript" src="../JQUERY/jquerymousewheelmini.js"></script>
	<!-- 上面那个是用来鼠标滚轮事件的 -->
	<script type="text/javascript">

  function JSONToExcelConvertor(fileName, jsonData) {

        var json = jsonData;

        var excel = '<table>';
        // style中的内容:mso-number-format:General:设置单元格格式为文本,这样可以保证我们的数据一定是原样
        for (var name in json) {
            // 每次循环把每对儿键值的内容放在同一行上
            excel += "<tr><td style='color:red;text-align:center;mso-number-format:General;'>" + name + '</td>';
            for (var i in json[name]){      // 这个i是数据的下标
                accountNumber = json[name][i]   // 拿到号码
                excel += "<td style='text-align:center;mso-number-format:General;'>" + accountNumber + '</td>';
                // 每个号码放置到一个单元格,
            }
            excel += "</tr>";   // 一行结束
        }
        //table结束
        excel += "</table>";


        var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
        excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';
        excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';
        excelFile += '; charset=UTF-8">';
        excelFile += "<head>";
        excelFile += "<!--[if gte mso 9]>";
        excelFile += "<xml>";
        excelFile += "<x:ExcelWorkbook>";
        excelFile += "<x:ExcelWorksheets>";
        excelFile += "<x:ExcelWorksheet>";
        excelFile += "<x:Name>";
        excelFile += "{worksheet}";
        excelFile += "</x:Name>";
        excelFile += "<x:WorksheetOptions>";
        excelFile += "<x:DisplayGridlines/>";
        excelFile += "</x:WorksheetOptions>";
        excelFile += "</x:ExcelWorksheet>";
        excelFile += "</x:ExcelWorksheets>";
        excelFile += "</x:ExcelWorkbook>";
        excelFile += "</xml>";
        excelFile += "<![endif]-->";
        excelFile += "</head>";
        excelFile += "<body>";
        excelFile += excel; //将table 拼接
        excelFile += "</body>";
        excelFile += "</html>";

        var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);
        // 给我们上面格式出来的内容设置一个URI(统一资源标志符)
        var link = document.createElement("a");     //创建a标签
        link.href = uri;        // 把上文解析出来的链接赋值给上面创建的a标签
        link.style = "visibility:hidden";        //设置为不可见,当然设置也可以,看个人喜好
        link.download = fileName + ".xls";//指定文件名和文件后缀格式
        // 不可以改为 xlsx格式,因为我们这个格式化是按照格式写出来的,而真正的excel文件格式很麻烦
        // 如果打不开,查看这个文件属性是否被锁定了,解除锁定即可。
        document.body.appendChild(link);        //追加a标签到html内部
        // 当然不放也能点击,但是为了保险起见,还是放一下
        link.click();   // 点击我们刚刚创建的a标签
        document.body.removeChild(link);    // 把刚刚创建的a标签删除了
    }
    $(function(){
        var json ={
            "--普通人--0--的大号--2019-10-20 09:29:14--Chuckie": ["72447305"],
            "--普通人--0--的大号 的第二条--2019-10-20 11:08:37--Chuckie": ["72447305"],
            "--学生--5--QQ号,新增的--2019-10-22 14:32:57 .09683--Chuckie": ["72447305"],
            "--好人--5--QQ号,新增的--2019-10-22 14:32:57.09683--Chuckie": ["72447305"],
            "--周二测试--0--2019年10月22测试--2019-10-22 15:38:46.37403--Chuckie": ["72447305",
                "267525217", "123321", "123456", "12345"
            ],
            "--普通人--0--小号--2019-10-20 11:08:55--Chuckie": ["267525217"]
        }
        // 如果大家的是字符串,就把下面两行解除注释,然后取控制台对比数据格式是否一致
        // json = JSON.parse(json);
        // console.log(json)
        JSONToExcelConvertor("json1",json);
    })
	</script>
</head>
<body>
</body>
</html>

下面这是结果的截图:

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一份代码示例。首先,您需要使用`Recorder.js`库来录制音频,并将录制的音频数据转换为Blob对象。然后,您需要使用`lamejs`库将Blob对象转换为MP3格式。最后,您可以使用jQuery的ajax方法将MP3文件发送到后端。 以下是示例代码: ```javascript // 初始化Recorder.js var audioContext = new (window.AudioContext || window.webkitAudioContext)(); var recorder = new Recorder(audioContext, { numChannels: 1 }); // 开始录音 recorder.record(); // 停止录音 recorder.stop(); recorder.exportWAV(function(blob) { // 将Blob对象转换为MP3格式 var reader = new FileReader(); reader.onload = function() { var samples = new Int16Array(reader.result); var buffer = []; var mp3encoder = new lamejs.Mp3Encoder(1, 44100, 128); var remaining = samples.length; var maxSamples = 1152; for (var i = 0; remaining >= maxSamples; i += maxSamples) { var left = samples.subarray(i, i + maxSamples); var mp3buffer = mp3encoder.encodeBuffer(left); if (mp3buffer.length > 0) { buffer.push(new Int8Array(mp3buffer)); } remaining -= maxSamples; } var mp3buffer = mp3encoder.flush(); // 任何剩余的MP3帧 if (mp3buffer.length > 0) { buffer.push(new Int8Array(mp3buffer)); } var blob = new Blob(buffer, { type: 'audio/mp3' }); // 将MP3文件发送到后端 $.ajax({ url: '/upload', type: 'POST', data: blob, processData: false, contentType: false, success: function(data) { console.log('上传成功'); }, error: function(error) { console.log('上传失败'); } }); }; reader.readAsArrayBuffer(blob); }); ``` 请注意,这只是一个简单的示例,并且需要根据您的项目进行修改。您可能需要添加错误处理和其他功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChuckieZhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值