mysql longBlob mybatis 保存数据并传递给前台 前台分段读取

(1)longBlod最大保存4G的数据,可以用来存取大文件的字符或者其他类型文件的二进制流等等,现在的需求是存取一个大小几十兆的json数据,现在使用的手段是,将json数据直接保存到数据库,并可以进行查看和修改,因此采用mysql里的longblob类型进行存取

(2)将数据库字段类型设置为longblob,下面是navicat中我的设置

(3)这里推荐大家使用mybatis的generator自动生成实体具体使用方法

https://blog.csdn.net/zhaoyy0513/article/details/103306605

(4)对应的实体属性,自动生成也好,自己写也好都是数组

(5)对应的mapping.xml 

(6)获取并传递给前台

  @Override
    public void getContentById(Integer layoutId, HttpServletResponse response) throws IOException {
        byte[] content = siteLayoutDao.getLayoutById(layoutId);
        // 创建字节数组输出流
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        // 将GZIP写入到输出流
        GZIPOutputStream gout = new GZIPOutputStream(bos);
        // 将要传递的content写入到Gzip
        gout.write(content);
        gout.close();
        byte[] dest =bos.toByteArray();
        response.setHeader("Content-Encoding", "gzip");
        response.setContentType("application/json;charset=UTF-8");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(dest);
        outputStream.close();
    }

(7)前台解析,因为数据过大,所以采用切割加载的策略

 

        // 请求content
        $.ajax({
            type: "get",
            contentType: "application/json;charset=utf-8",
            dataType: 'text',
            async: true,   //默认配置,设为异步的也就是可以同时执行两个请求
            url: "/mac/sites/1/site-layouts/getLayoutContentById?layoutId=25",
            success: function (res) {
                const len = res.length;
                // 定义分段次数
                const time = 10;
                // 定义每次分段的长度
                const everySize = len / time;
                console.log("len:" + len);
                console.log("everySize:" + everySize);
                let i = 1;
                let interVal = setInterval(function () {
                    console.log("i:" + i);
                    const infos = $("#last #getInfo");
                    infos.append(res.substring((i - 1) * everySize, everySize * i) + '<br/>');
                    i++;
                    // 如果变量i大于我们设定的分段次数,就清除Interval
                    if (i > time) {
                        clearInterval(interVal);
                    }
                }, 1000);
            },
            error: function () {
                alert("获取失败");
            }
        });

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值