java 断点续传 开源_java断点续传后台代码
/**
* 文件下载
* @param request
* @param response
*/
@RequestMapping(params = "viewFile")
public void viewFile(HttpServletRequest request, HttpServletResponse response) {
InputStream bis = null;
BufferedOutputStream bos = null;
long fileLength = 0;
try {
File filePic = new File(filePath);
fileLength = filePic.length();
if(filePic.exists()){
bis = new BufferedInputStream(new FileInputStream(filePath+"/"+realPath));
if(extend.equals("mp4")) {
response.setContentType("video/mp4"); // 设置返回的文件类型
}else if(extend.equals("mp3")){
response.setContentType("audio/mp3");
}
response.setHeader("Content-disposition", "attachment; filename=" + new String((attachment.getAttachmenttitle()+"."+attachment.getExtend()).getBytes("GBK"), "ISO8859-1"));
response.setHeader("Accept-Ranges", "bytes");
long pos = 0;
long epos = fileLength-1;
if (null != request.getHeader("Range")) {
// 断点续传
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
try {
String rangeString = request.getHeader("Range");
rangeString = StringUtils.substringAfter(rangeString,"bytes=");
String s = StringUtils.substringBefore(rangeString, "-");
if(org.apache.commons.lang3.StringUtils.isNotBlank(s)){
pos = Long.parseLong(s);
}else
pos = -1;
String e = StringUtils.substringAfter(rangeString, "-");
if(org.apache.commons.lang3.StringUtils.isNotBlank(e)){
epos = Long.parseLong(e);
}
} catch (NumberFormatException e) {
}
StringBuffer contentRange = new StringBuffer("bytes ");
contentRange.append(pos + "").append("-").append(epos+"");
contentRange.append("/").append(fileLength+"");
response.setHeader("Content-Range", contentRange.toString());
response.setHeader("Content-Length", String.valueOf(epos-pos+1));
bis.skip(pos);
}
if(epos-pos+1 >0){
byte[] buff = new byte[(int)(epos-pos+1)];//缓冲
bos = new BufferedOutputStream(response.getOutputStream());// 得到向客户端输出二进制数据的对象
int readBytes = bis.read(buff, 0, buff.length);
bos.write(buff, 0, readBytes);
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (bis != null) {
bis.close();
}
if (bos != null) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
java 断点续传 开源_java断点续传后台代码相关推荐
- java 断点续传 开源_java断点续传原理
先说说断点续传的原理:这是HTTP 1.1协议的一部分,并不需要客户端特意去做多么复杂的事情.以前我曾经看过一个单位的技术标书,其中有下载的断点续传这一要求,给出的offer居然还挺高的... 简单的 ...
- java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...
[实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...
- java 线程 函数_java – 从后台线程调用主线程上的函数
更新 我已经更新了这个问题,使用建议的SwingWorker类包含Java实现的源代码,以实现与Objective-C示例相同的结果.希望这将有助于未来的冒险家. Document myDoc = . ...
- Java 仿QQ空间评论 后台代码实现 一张表
因为项目业务需要,特此写出此仿QQ空间的评论功能,项目如下图所示,records下的是一级评论 里面的commentList是二级评论,前端根据此数据格式渲染即可 表结构如下,其中father_id与 ...
- java 抓屏_java抓屏代码
一个网上找下来的 抓屏代码只需呀输入要存放的路径和名字 就可以执行,但不能为空. import java.awt.Dimension; import java.awt.Rectangle; impor ...
- java基础格式_Java基础之代码的基本格式
每一种编程语言都有一套自己的语法规范,java也是如此,同样需要遵从一定的语法规范,如代码的书写.标识符的定义.关键字的应用等.因此要学好Java就要先熟悉它的基本语法.很多人都在发知识点和课程大纲, ...
- java synchronized块_Java多线程同步代码块Synchronized
Java多线程同步代码块Synchronized Java中的每个对象都有一个与之关联的内部锁(Intrinsic lock). 这种锁也称为监视器(Monitor), 这种内部锁是一种排他锁,可以保 ...
- java 9999 符号_java 9999(示例代码)
1. map 1.1. map中的方法 1.2. Map.Entry 对于集合来讲,就是把kye-value的数据保存在了Map.Entry的实例之后,再在Map集合中插入了一个Map.Entry的实 ...
- java 注册回调_java 实现回调代码实例
JAVA实现回调 熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为"回调").Ja ...
最新文章
- RH033 Unit 13 Finding and Processing Files
- 人体关键点颜色和预处理
- 哈哈,我的Blog开通了。。。
- win7怎么设置开机密码_win7系统设置电脑密码的方法
- CentOS7下让Asp.Net Core的网站自动运行
- 远程连接到 SQL Server 2005 时的问题汇集!!
- 【音视频数据数据处理 6】【RGB篇】将RGB24图片转为YUV420格式图片
- Gradle教程——(二)Gradle介绍
- Java P5713 【深基3.例5】洛谷团队系统 洛谷入门题
- Excel将数值转换为按指定数字格式表示的文本
- 3.3-上位机与下位机通信构架源代码编写与使用方法说明
- Xunit.net 单元测试学习——按顺序测试
- 负载均衡技术全攻略(大全)
- Redhat 7 安装 iftop软件
- 40款非常酷的国外创意名片设计欣赏(上)
- JavaScript之JS事件机制
- 【报告分享】2020中国异常流量报告-秒针系统中欧商业评论(附下载)
- STM-32:I2C通信协议—软件I2C读写MPU6050
- 测试人即用宝典,全网最全的功能测试点,有这一篇完全足够......
- 关闭PyCharm中的波浪线-右下角没有小人头的问题解决
热门文章
- mysql主从安装_MySQL主从详细安装步骤
- 商务建筑空间场景合成海报
- oracle存储过程拆分字符串函数,Oracle中利用存储过程来分割字符串
- java之点击一次之后失效_JavaScript 事件绑定只能执行一次了,再次点击就变得无效 ,求助怎么回事...
- javascript 无法修改 数组中对象_如何使用JavaScript中的Date对象
- 错过就找不到了 Java API文档 免费下载!!!
- int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
- 总线驱动:Bus driver - USB driver for example
- ncurses输出函数:字符+字符串的输出
- windows下安装cygwin以及SeismicUnix在cygwin下的安装(windows下安装linux环境,非虚拟机、非双系统)