读取MySQL存储二进制的语音、图片(Blob类型)
/** * 下载语音 * 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类型)的更多相关文章
- mysql 存储二进制数据
晚上小研究了下MySQL存储于读取二进制数据的功能.关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long) 插入二进制数据时 ...
- python+ mysql存储二进制流的方式
很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ...
- python 读取mysql存储的文件路径下载文件,内容解析,上传七牛云,内容入es
#!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import json import os import re fr ...
- oracle 向表中插入BLOB类型数据
提示: 待插入图片必须保存到oracle主机路径上. 步骤: 1.SYSDBA权限用户创建图片所在目录 CREATE OR REPLACE DIRECTORY TEST_DIR AS 'C:\Pict ...
- MySQL的BLOB类型(解决mysql不支持mb4编码的时候存储emoji表情问题)
今天在存储emoji表情的时候,发现无法存储,mysql版本太低也没办法使用uft8mb4格式编码,只能将数据字段设置为blob BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型 ...
- mysql存储blob限制
一.Mysql存储类型分类: 1.blob:二进制大对象(字节流),可以用来存储图片.视频等,没有字符集的说法 2.text:文本大对象(字符流),存储大型字串,有字符集的说法 3.二者使用时不能指定 ...
- BLOB类型的字段用于存储二进制数据
MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型类型 ...
- 第 3 章 MySQL 存储引擎简介
第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...
- MySQL存储引擎与数据类型
1 数据存储引擎 存储引擎的概念是MySQL的一个特性,它指定了表的类型(诸如表怎样存储与索引数据.是否支持事务.外键等),表在计算机中的存储方式. 1.1 MySql支持的数据存储引擎 查看引擎信息 ...
随机推荐
- java多线程编程——锁优化
并发环境下进行编程时,需要使用锁机制来同步多线程间的操作,保证共享资源的互斥访问.加锁会带来性能上的损坏,似乎是众所周知的事情.然而,加锁本身不会带来多少的性能消耗,性能主要是在线程的获取锁的过程.如 ...
- java url demo
// File Name : URLDemo.java import java.net.*; import java.io.*; public class URLDemo { public stati ...
- ContentProvider工作过程
ContentProvider启动过程(通过query方法触发) ContentProvider.acquireProvider--> ApplicationContentResolver.ac ...
- 分享一个Appium/selenium测试报告模板
介绍 这个模板改编自 这位外国老哥 效果图 错误截图 录像 失败的case可以点击"view"查看报错信息, 也可以点击screenshot查看截图信息,更可以点击replay查看 ...
- 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码
一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...
- Wireshark理解TCP乱序重组和HTTP解析渲染
TCP数据传输过程 TCP乱序重组原理 HTTP解析渲染 TCP乱序重组 TCP具有乱序重组的功能.(1)TCP具有缓冲区(2)TCP报文具有序列号所以,对于你说的问题,一种常见的处理方式是:TCP会 ...
- 深度学习篇——Tensorflow-GPU配置
tensoflow-gpu安装 对于python 3.5和3.6的童鞋们而言,安装tensorflow其实并不难,因为我们可以通过pip直接安装. 不过,第一要求你安装的python是64位的,如下图 ...
- iOS的GIF动画效果实现
引言:GIF图像格式是常见的一种动态图片格式,无论是在Web端还是在移动端都经常遇到,但是考虑目前iOS还无法原生展现GIF图片,而对于GIF的原生支持暂时也没有像JPG.PNG等图像格式支持得这么全 ...
- 个性化WinPE封装方法----制作过程需要了解的“命令”
1.在现有的Windows7条件下,自动在E盘建立mywinpe文件夹,设置 Windows PE 构建环境,并保存到E:\mywinpe下 copype.cmd x86 E:\mywinpe 2.将 ...
- zTree实现单独选中根节点中第一个节点
zTree实现单独选中根节点中第一个节点 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTree实现基本树& ...