开发者社区> 桃子红了呐> 正文

SpringMVC处理MySQL BLOB字段的下载

简介:
+关注继续查看

任务:

uos.docfile的content字段是longblob类型,通过Web点击链接能下载到存储在这个字段里的文件。Web点击链接类似如下形式:

http://localhost:8080/dld/downloadDocument.html?id=81&&filename=jfreechart-1.0.19.zip

 

1.控制器代码:

复制代码
    @RequestMapping("/downloadDocument")
    public ModelAndView downloadDocument(HttpServletRequest request,HttpServletResponse response){
        try {
            // 取参数
            String id=request.getParameter("id");
            String filename=request.getParameter("filename");
            
            // 设置Resposne
            response.reset();
            response.setHeader("Content-disposition", "attachment; filename="+filename);
            response.setContentType("text/x-plain");
        
            // 获得输出流
            ServletOutputStream out = response.getOutputStream();

            // 从数据库拷贝输出流
            ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(4096);
            service.copyDocumentOutputStream(id, byteOutputStream);
            logger.info(" call PosService.copyDocumentOutputStream successfully.");
            
            // 转化
            byte[] bt = null;
            bt = byteOutputStream.toByteArray();               
            
            // 向客户端写输出
            out.write(bt);
            out.flush();
            out.close();
            
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e);
            
            request.setAttribute("error", e.getClass());
            request.setAttribute("reason", e.getMessage());
            StackTraceElement[] arr=e.getStackTrace();
            request.setAttribute("stackTraceElements", arr);
            
            return new ModelAndView("pages/error/index.jsp");
        }
    }
复制代码

 

2.Service中代码,同样这里也只是中转

public void copyDocumentOutputStream(final String id, final OutputStream os) throws Exception{
        getPosDao().copyDocumentOutputStream(id, os);
    }

3.DAO中代码,这里是实质代码

复制代码
    public void copyDocumentOutputStream(final String id, final OutputStream os) throws Exception{
        final LobHandler lobHandler=new DefaultLobHandler();
        
        this.getJdbcTemplate().query("select content from uos.docfile where id=?",new String[] {id},new AbstractLobStreamingResultSetExtractor(){
            protected void streamData(ResultSet rs) throws SQLException,IOException,DataAccessException{
                FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs,1),os);
            }
        });
    }
复制代码

 










本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/4168891.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL:json字段查询:数组、对象、成员检查
MySQL:json字段查询:数组、对象、成员检查
16 0
【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
28 0
mysql varchar类型字段为数字时,不带引号查询时查询结果与事实不符
mysql varchar类型字段为数字时,不带引号查询时查询结果与事实不符
60 0
mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
42 0
Mysql中查询数据库中包含某个字段的所有表名
Mysql中查询数据库中包含某个字段的所有表名
37 0
mysql将字符串类型字段后面的小数点和零去掉
mysql将字符串类型字段后面的小数点和零去掉
41 0
mysql sum函数中对两字段做运算时有null时的情况
mysql sum函数中对两字段做运算时有null时的情况
30 0
Mysql中通过关联update将一张表的一个字段更新到另外一张表中
Mysql中通过关联update将一张表的一个字段更新到另外一张表中
66 0
mysql 进行update时,要更新的字段中有单引号或者双引号导致不能批量生成sql的问题...
mysql 进行update时,要更新的字段中有单引号或者双引号导致不能批量生成sql的问题...
42 0
MySQL:递减/递减更新一列字段值
MySQL:递减/递减更新一列字段值
33 0
mysql ,如何将B表的字段f 作为A表的主键s的外键?
假设您已经有两个表A和B,且它们都已经有字段,其中A表的主键为s,B表中的字段为f。要将B表的字段f作为A表的主键s的外键,可以使用以下的 SQL 语句来实现:
17 0
mysql中 如何设置字段不限长度
在MySQL中,可以使用数据类型TEXT来存储不定长的文本数据。如果不需要限制文本的最大长度,可以使用TEXT数据类型而不指定长度。 例如,下面的SQL语句创建一个名为my_table的表,其中包含一个text_column字段,该字段不限长度:
177 0
MySQL:JSON字段List成员检查
MySQL:JSON字段List成员检查
21 0
条件为以逗号分隔的字段与 ID 相匹配的 MySQL JOIN 写法
条件为以逗号分隔的字段与 ID 相匹配的 MySQL JOIN 写法
88 0
MySQL:错误代码:1118行大小太大(> 8126)将某些列更改为TEXT或BLOB
MySQL:错误代码:1118行大小太大(> 8126)将某些列更改为TEXT或BLOB
86 0
+关注
桃子红了呐
文章
问答
视频
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像