很久以前做文件下载都是在服务器生成文件,然后做一个链接,这样浏览器不认识的文件类型就会弹出操作系统另存对话框,实现下载,今天遇到一个案例被困了,具体需求是这样:
在web页面点击下载按钮,服务端从数据库查询数据,组装成输出流,由response输出到客户端,由于架构中使用的第三方组建较多,所以在做这个功能时让人头疼,最终在ahuaxuan的帮助下搞定,现将代码贴出来供兄弟们参考:
public class
DownServlet extends
HttpServlet {
/**
*
*/
private static final long
serialVersionUID = 1L;
@Override
protected void
service(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException {
byte
[] picbytes = "fdsafdasfds".getBytes();
res.setContentType("application/x-download");
// attachment:打开另存对话框;inline:用浏览器打开
res.setHeader("Content-Disposition", "attachment;filename=fdsafd.txt");
//res.setHeader("Content-Disposition", "inline;filename=fdsafd.txt");
res.getOutputStream().write(picbytes);
res.getOutputStream().flush();
}
}
在下载应用中需要注意web.xml中是否有其他的filter和一些拦截器配置,这些可能会拦截掉下载的地址.
下面这个类是用来抓取网络上的文件,转换成字节数组,fileUrl是文件的绝对路径,在上面的Servlet中调用download()方法,然后将setHeader()方法参数改为"inline",就可将别的网站上抓取的图片输出的自己的页面。
import
java.io.ByteArrayOutputStream;
import
java.io.InputStream;
import
org.apache.commons.httpclient.HttpClient;
import
org.apache.commons.httpclient.UsernamePasswordCredentials;
import
org.apache.commons.httpclient.auth.AuthScope;
import
org.apache.commons.httpclient.methods.GetMethod;
public class
HttpDownloadService {
public byte
[] download(String fileUrl) {
HttpClient client = new
HttpClient();
GetMethod method = new
GetMethod(fileUrl);
client.getHttpConnectionManager().getParams().setConnectionTimeout(1000 * 60 * 5);
client.getHttpConnectionManager().getParams().setSoTimeout(1000 * 60 * 10);
ByteArrayOutputStream outPut = new
ByteArrayOutputStream();
try
{
UsernamePasswordCredentials upc = new
UsernamePasswordCredentials("", "");
AuthScope scope = new
AuthScope(null, 0);
client.getState().setCredentials(scope, upc);
method.setDoAuthentication(true);
int
status = client.executeMethod(method);
if
(status != 200) {
throw new
RuntimeException("the status is " + status);
}
InputStream input = method.getResponseBodyAsStream();
int
length = 0;
byte
[] rbody = new
byte[1024];
int
readNum = 0;
while
((readNum = input.read(rbody)) > 0) {
byte
[] kk = new byte
[readNum];
for
(int k = 0; k < kk.length; k++) {
kk[k] = rbody[k];
}
outPut.write(kk);
length += readNum;
outPut.flush();
}
outPut.flush();
outPut.close();
} catch
(Exception e) {
e.printStackTrace();
} finally
{
method.releaseConnection();
}
return
outPut.toByteArray();
}
}
以上代码尽供参考,有更好的意见或方法请赐教。
分享到:
相关推荐
在提供的压缩包文件中,“ExuiKrnln_Win32.lib”可能是一个动态链接库文件,用于支持“萝卜头文档下载器.exe”的功能实现。这类库文件通常包含可被其他程序调用的函数,可能包含了解析网页、模拟登录、抓取下载链接...
总之,"基于Java的book118文档下载器"是一个综合运用了网络请求、HTML解析、文件操作等多种Java技术的实用工具,其具体实现会涉及到网络编程、数据解析、文件I/O等多个计算机科学和技术领域。对于学习Java编程和网络...
在线文档下载器可能使用此库来解析和处理从网站下载的PDF文件,确保用户可以本地存储和阅读这些文档。 “iDocDown.exe”是主程序执行文件,是在线文档下载器的核心部分。它包含了实现下载功能的算法和逻辑,能够...
6. **新建 文本文档.txt**:这可能是示例中的一个测试文件,用于演示如何通过Ajax进行下载。在实际应用中,这个文件的名称和类型将由用户选择或由业务逻辑决定。 具体实现步骤: 1. **前端**:在JSP文件中,使用...
【原创力文档下载工具】利用Python下载原创力文档是一个典型的Web爬虫应用场景,它涉及到Python编程语言、网络请求、文件处理以及可能的HTML解析技术。在这个项目中,开发者使用Python来自动化获取并下载原创力平台...
标题中的“超级好用的百度文档下载工具”指的是一个专门设计用于从百度文库下载文档的应用程序。这个工具旨在提供一种高效、简便的方式来获取百度文库中的资源,从而避免在线阅读时可能出现的不便,比如广告干扰、...
这些工具能够解析百度文库的页面,抓取文档内容并将其转换成本地文件。使用这类工具时,用户需要复制百度文库文档的网页链接,然后粘贴到工具的输入框内,按照提示进行操作。值得注意的是,这种方法可能受制于网站的...
豆丁网免费下载器(冰点)无需登录也无需积分,只需要将需要下载的文档的网页地址复制在软件的录入框中就可以自由下载,并最终生成pdf文件。对部分pdf文件能够提取文字生成txt。 豆丁网免费下载器还支持自由下载百度、...
1、在本站下载解压,得到小叶文库下载器软件包; 2、首先前往文库网站找到需要下载的文库 3、将其文库地址复制粘贴到软件中,进行解析下载;...4、之后下载好的文件可在本自录下的Download文件夹进行查看。
对于"Fish-v321"这个文件,根据上下文推测,这可能是某个特定的在线文档下载神器的版本号或者是该工具的安装包文件名。具体的功能和使用方法,可能需要进一步查阅相关软件的说明书或者进行实际操作来了解。总的来说...
visual studio 2010的帮助文档很难下载,一方面文件很多很大,全部文档超过1GB,使用微软自带的 或者辅助工具,由于没有发挥多线程和断点续传的特点,下载速度很慢,容易失败。 另一方面迅雷等下载工具,可以实现...
至于文件`idocdown_v28`,这可能是该文档下载工具的版本号或者是程序的执行文件名。在实际使用中,用户需要将这个文件解压并安装在本地计算机上,然后按照软件的指示操作,输入目标文档的网址,工具便会自动开始下载...
国密规范文档所有标准稳当的下载链接,SM2/SM3/SM4/SM9等,各种国密产品检测规范
豆丁文档下载器是一款专为了解决用户在豆丁网上下载文档困难而设计的软件工具。豆丁网是一个在线文档分享平台,用户可以上传、分享和查找各种类型的文档,包括学术论文、研究报告、课件、书籍等。然而,豆丁网为了...
【描述】"文档下载器" 提供了一个集成化的解决方案,让用户能够轻松下载网络上的文档资源,特别是可能存在于各种文档分享平台上的PDF、SWF等格式的文件。它可能包含了用于处理不同文件类型的组件,以及一些支持程序...
在提供的压缩包子文件“Fish-v324-0712”中,我们可以推测这可能是冰点文档下载器的一个版本,其中可能包含了软件的执行文件、帮助文档、许可证文件等组成部分。用户在下载这个压缩包后,需要解压并按照指示安装和...
标题中的“pb实现http文件下载功能--源代码 可以直接使用”指的是使用PowerBuilder(简称PB)编程语言实现HTTP协议进行文件下载的功能,并且提供了可以直接使用的源代码。这个功能在软件开发中常用于实现自动更新...
豆丁文档下载破解器. 豆丁文档下载破解器. 豆丁文档下载破解器.
由于在学习numpy数据分析的时候没有csv类型文件,又懒得自己一个个敲字,便想来csdn里随便下载一个。然而......居然要钱啊!!!!!!!我没钱,所以自己写了个,我不要你们的钱,麻烦各位拿资源的时候吱一声,这是...