/**   * 下载语音   * Remarks:   * @throws Exception   */

public void downloadYuyin() throws Exception {

String voiceId = getRequest().getParameter("voiceId");

InputStream inputStream = voiceService.findInputByVoiceId(voiceId);

String realPath1 = getRequest().getRealPath("/") + "/upload/voice.pttly";

File f2 = new File(realPath1);   FileOutputStream dos = new FileOutputStream(f2);  // 生成带缓冲区的二进制 写入流

OutputStream dosss = new DataOutputStream(new BufferedOutputStream(  new FileOutputStream(f2)));

// 创建文件读取缓冲区

byte[] buf = new byte[2048];

// 读进 缓冲区    dos.write(toByteArray(inputStream));

// 把文件数据写入文件

dos.close();//关闭流

String realPath = getRequest().getRealPath("/") + "/upload/voice.pttly";

File file = new File(realPath);

String filename = file.getName();

InputStream fis = new BufferedInputStream(new FileInputStream(     realPath));

byte[] buffer = new byte[fis.available()];   fis.read(buffer);   fis.close();   // 清空

response   getResponse().reset();

// 设置response的Header

getResponse().addHeader("Content-Disposition", "attachment;

filename="+ new String(filename.getBytes()));

//getResponse().addHeader("Content-Disposition", "attachment;filename="+"yuyin.pttly");

getResponse().addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(getResponse()     .getOutputStream());

getResponse().setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

toClient.close();

}

//service

public InputStream findInputByVoiceId(String voiceId) {
  return voiceDao.findInputByVoiceId(voiceId);
 }

//dao

@SuppressWarnings("rawtypes")
 public InputStream findInputByVoiceId(String voiceId) {
  String sql = "SELECT voice_id,call_user_id,group_id,UnitId,participate_user_id,call_type,starttime,endtime,voicedata FROM Voice_Info WHERE voice_id="+voiceId;
  SQLQuery sqlQuery = createSQLQuery(sql.toString());
  List lists = sqlQuery.list();
  InputStream input = null;
  for(int i=0;i<lists.size();i++){
   Object[] objects=(Object[])lists.get(0);
   if(objects != null){
    SerializableBlob o = (SerializableBlob) objects[8];
    try {
     input = o.getBinaryStream();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }
  return input;
 }

读取MySQL存储二进制的语音、图片(Blob类型)的更多相关文章

  1. mysql 存储二进制数据

    晚上小研究了下MySQL存储于读取二进制数据的功能.关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long) 插入二进制数据时 ...

  2. python+ mysql存储二进制流的方式

    很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ...

  3. python 读取mysql存储的文件路径下载文件,内容解析,上传七牛云,内容入es

    #!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import json import os import re fr ...

  4. oracle 向表中插入BLOB类型数据

    提示: 待插入图片必须保存到oracle主机路径上. 步骤: 1.SYSDBA权限用户创建图片所在目录 CREATE OR REPLACE DIRECTORY TEST_DIR AS 'C:\Pict ...

  5. MySQL的BLOB类型(解决mysql不支持mb4编码的时候存储emoji表情问题)

    今天在存储emoji表情的时候,发现无法存储,mysql版本太低也没办法使用uft8mb4格式编码,只能将数据字段设置为blob BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型 ...

  6. mysql存储blob限制

    一.Mysql存储类型分类: 1.blob:二进制大对象(字节流),可以用来存储图片.视频等,没有字符集的说法 2.text:文本大对象(字符流),存储大型字串,有字符集的说法 3.二者使用时不能指定 ...

  7. BLOB类型的字段用于存储二进制数据

    MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型类型 ...

  8. 第 3 章 MySQL 存储引擎简介

    第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...

  9. MySQL存储引擎与数据类型

    1 数据存储引擎 存储引擎的概念是MySQL的一个特性,它指定了表的类型(诸如表怎样存储与索引数据.是否支持事务.外键等),表在计算机中的存储方式. 1.1 MySql支持的数据存储引擎 查看引擎信息 ...

随机推荐

  1. .Net Core和jexus配置HTTPS服务

    花了几天时间,看了好多篇博客,终于搞定了网站的HTTPS服务,借此写篇博客,来让有需要的朋友少走弯路. 一.环境介绍 1.Linux下在Docker容器中部署好了一个网站,该网站需要通过外部提供程序访 ...

  2. prop&attr区别和用法,以多选框为例

    1.比较 相同点 : prop和attr作为jquery的方法都可以获取属性值; 不同点 : (1) 对于HTML元素本身就带有的固有属性,使用prop方法, attr获取checkbox的check ...

  3. 深入java虚拟机学习 -- 类的加载机制(续)

    昨晚写 深入java虚拟机学习 -- 类的加载机制 都到1点半了,由于第二天还要工作,没有将上篇文章中的demo讲解写出来,今天抽时间补上昨晚的例子讲解. 这里我先把昨天的两份代码贴过来,重新看下: ...

  4. 对于 @Autowired注解和@service注解的理解

    @Autowired相当于Spring自动给你进行了new一个对象将这个对象放入你的注解所在类里面. @service 是可以让IOC容器对于你注解的类可以在容器中生成相应的bean实例 便于我们进行 ...

  5. 剑指offer第四天

    25.复杂链表的复制 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的 ...

  6. ThreadLoacl,InheritableThreadLocal,原理,以及配合线程池使用的一些坑

    虽然使用AOP可以获取方法签名,但是如果要获取方法中计算得出的数据,那么就得使用ThreadLocal,如果还涉及父线程,那么可以选择InheritableThreadLocal. 注意:理解一些原理 ...

  7. Redis持久化存储

    Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式:二是Appen ...

  8. home目录迁移至新分区

    在用户home目录越来越大时,就可以考虑将home目录迁移至新的分区. 1.创建新分区. fidisk /dev/sda:用磁盘管理器打开磁盘 n:新建 +10g :设置分区为10G w :保存 保存 ...

  9. HI3531网络tftp、nfs加载

     ifconfig eth0 hw ether 00:00:23:34:45:66; ifconfig eth0 192.168.1.10 netmask 255.255.255.0; route a ...

  10. Ubuntu12.04LTS安装好后是空白桌面的解决步骤(更新显卡驱动)

    安装完毕启动后,明显慢的要死,登陆后竟然是一个空白的桌面环境,Ctrl+Alt+T 根本没有任何反应.唯一的反应就是右键能够创建文件和文档. 同时打开的窗口没有最大化,最小化及关闭按钮. GOOGLE ...