java 文件下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 文件下载相关的知识,希望对你有一定的参考价值。

public HttpServletResponse download()
HttpServletResponse response = null;
try
response = ServletActionContext.getResponse();
String path = getRequest().getParameter("fileName");
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
// String ext = filename.substring(filename.lastIndexOf(".") + 1)
// .toLowerCase();

// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.setHeader("Content-Type", "application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(filename.getBytes(), "ISO8859-1"));
response.addHeader("Content-Length", "" + file.length());
// response.setContentType("application/octet-stream");
OutputStream toClient = response.getOutputStream();

toClient.write(buffer);
toClient.flush();
toClient.close();
catch (IOException ex)
return null;

return null;


如上程序,response.addHeader("Content-Disposition", "attachment;filename="+ new String(filename.getBytes(), "ISO8859-1")); 这句的‘attachment’存在时,在下载文件后,前台js脚本变得很慢。如果把‘attachment’去掉,前台变得很快,但前台ie会自动打开文件,不提示保存文件的提示框,我想把‘attachment’去掉,但前台不管什么类型的文件都提示保存的提示框!
前台很慢,不是下载文件速度慢,而是很卡的感觉,反映比较迟钝的那种!
不知大家有没有遇到相似的问题啊!!!!
请各位高手给与解答!!谢谢了

这很奇怪啊,下载怎么会影响到Js脚本呢,看你的下载程序,这相当于一个完整的交互过程,如果要提出改进建议,我会说,你完全浪费 BufferedInputStream的优势,尤其是这句
byte[] buffer = new byte[fis.available()];
简直是败笔中的败笔,如果是个100m的文件,这要占多少内存?
建议这样使用:
byte[] buffer=new byte[4096];
int readByte=0;
while((readByte=fis.read(buffer)>0)
toClient.write(buffer,0,readByte);
参考技术A //像txt文件,但不能太大
这个你用数组做能去掉大小的弊端

//但excel文件就不能保存
这个问题试试"另存为"好不好使 或者 "在新窗口打开"
再次确定下你的IE是不是集成了Excel的查看功能(就是能有IE打开Excel),如果是的话 删除插件即可

p.s.
处理IO流时的问题....
file=new File("c:\text.txt");
DateInputStream dis=new DataInputStream(new FileInputStream(file));
byte b[]=new byte[(int)file.length()];
int i=0;
while((i=(dis.read(b)))!=-1)
String s=new String(b,0,i);
JTextField.setText(s);
dis.close();
就是个例子...

以上是关于java 文件下载的主要内容,如果未能解决你的问题,请参考以下文章

java 如何下载文件?

java 下载功能

java实现动态读取文件夹文件信息

java 实现下载

java文件下载改名

java文件下载有啥区别慕课