Servlet下载文件迅雷不支持问题真相之一
问题描述
最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB
真相搜罗
网上有很多帖子说Servlet怎么支持迅雷下载的,需要设置response参数,比如这个 
http://buerkai.iteye.com/blog/1756929
也有讨论迅雷断点续传协议的,比如这个 
http://zhidao.baidu.com/link?url=KbZQdoNg3W7iWS5PQ8KqSY0PeVzzkPijD58FPXWYhWzJtf534_FzHd1ChNBtqA2mQjGKC8K9YneVu3iut7Bv30K6G-6WlY3H8wG_59CxMTO
类似的帖子有很多,可是搜来搜去,改来改去,我的Servlet下载文件就是不能支持迅雷
问题分析
经过多次测试,发现迅雷下载文件,会访问两次Servlet,网上也有说是多次的,我测试很多次都是两次,而浏览器下载文件,只访问一次Servlet,这是一个很大的区别
为了一探究竟,也对比过浏览器下载和迅雷下载的请求信息,发现如果是弹出框下载文件,迅雷的两次请求referer参数会有差异 
Servlet获取请求信息参考http://my.oschina.net/hlevel/blog/106622
并且,最最关键的是,我的Servlet下载的文件是动态生成的,下载之后就会删除临时文件,所以迅雷请求多次的时候就悲催了
解决办法
迅雷下载失败的根本原因在于临时文件在Servlet被访问一次之后就删除了,后面的请求都获取不到文件内容
既然如此,解决方法如下: 
方法一:下载的临时文件不要立即删除,可以通过定时器定时清理 
方法二:想办法找到迅雷下载和浏览器下载请求信息的区别,另寻其他解决办法……
Servlet下载文件迅雷不支持问题真相之一的更多相关文章
- Servlet 下载文件
		
这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和Java相关的书籍,其实这些书都是自己以前看过或者听过,按理来说,不应该看自己已经看过的书籍,应该找一些最新的书籍去看,但是每次走到书架 ...
 - Servlet下载文件和http响应
		
下载文件等: 1.得到公共的内容ServletContext sc = this.getServletContext(); 2.在链接名字后面加个? 一个参数?参数1=值 两个参数?参数1=值& ...
 - Servlet 下载文件及支持中文文件名
		
Sevlet 下载pdf文件 支持中文文件名 package html2pdf.controller; import java.io.File; import java.io.FileInputStr ...
 - servlet下载文件
		
package myjava.cn; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS ...
 - vue下载文件
		
import fileDownload from 'js-file-download' let params = { ", ", "filename":&quo ...
 - web下载文件夹
		
1.文件下载有两种方式:一种是超链接,一种是Servlet提供下载. 2.超链接下载时:当文件可以在网页直接打开时,会直接打开文件,而不是下载,当文件打开不了时,会提供下载窗口. 3.超链接下载原理 ...
 - springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
		
参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...
 - servlet实现文件上传,预览,下载和删除
		
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数 ...
 - Servlet实现文件,图片等的下载    含代码
		
实现文件的下载源代码如下: package com.fxl.servlet; import java.io.FileInputStream;import java.io.IOException;imp ...
 
随机推荐
- 【Acm】算法之美—Crashing Balloon
			
题目概述:Crashing Balloon On every June 1st, the Children's Day, there will be a game named "crash ...
 - scp拷贝提示its a directory 错误
			
scp拷贝提示its a directory 错误 场景 使用scp的格式是 scp my_file user@ip:/home/directory 之前也一直这么用,没什么错误,莫名其妙 原因定位 ...
 - Python 调用datetime或者time获取时间的时候以及时间转换,最好设置一下时区 否则会出现相差8个小时的情况
			
在使用调用datetime或者time获取时间的时候以及时间转换,最好设置一下时区, 因为不同机器设置的时区不同,获取的时间可能就不对,正好我们使用的这两个服务器使用的都是东八区,所以没有问题,设置方 ...
 - 国内Docker下载镜像提速方法之一
			
众所周知,Docker Hub并没有在国内部署服务器或者使用国内的CDN服务,因此在国内特殊的网络环境下,镜像下载十分耗时.为了克服跨洋网络延迟,能够快速高效地下载Docker镜像,我采用了DaoCl ...
 - cf  366D   D. Dima and Trap Graph (计算所有线段共同覆盖的某段区间)
			
http://codeforces.com/problemset/problem/366/D 题意:给出n个点,m条边,a,b,ll,rr分别代表点a,点b相连,点a和点b的区间范围(ll,rr),然 ...
 - RabbitMQ中各种消息类型如何处理?
			
一:消息类型 Map String(含json字符串类型) 二:处理方法 2.1 Map消息 如果发送的消息类型是map类型,可以通过SerializationUtils.deserialize方法将 ...
 - ADO.NET 实体数据模型 异常-“序列化类型为 XX 的对象时检测到循环引用”
			
发生异常的代码如下: 1: public JsonResult GetSaleByNo1(string id) 2: { 3: SaleMvcUI.Helper.saleDBEntities sale ...
 - jquery开发的数字相加游戏(你能玩几分)
			
jquery开发的数字相加游戏,我在一轮中玩了632分(如下图),你能玩几分,哈哈... 我要试一试 下面贡献下这款“数字相加游戏”的开发过程. html部分: <div class=" ...
 - cas单点登录-jdbc认证(三)
			
前言 本节的内容为JDBC认证,查找数据库进行验证,其中包括: 密码加密策略(无密码,简单加密,加盐处理) 认证策略(jdbc) 一.业务需求 不同的公司,需求业务需求或者架构不一样导致我们实现验证的 ...
 - IIS7上传文件大小設定
			
1.首先.修改Web.Config中的maxRequestLength.单位是KB:executionTimeout单位是秒.例:maxRequestLength=1024(1MB)execution ...