java 文件下载
publicHttpServletResponsedownload(){HttpServletResponseresponse=null;try{response=Ser...
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’去掉,但前台不管什么类型的文件都提示保存的提示框!
前台很慢,不是下载文件速度慢,而是很卡的感觉,反映比较迟钝的那种!
不知大家有没有遇到相似的问题啊!!!!
请各位高手给与解答!!谢谢了 展开
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);
}
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);
}
展开全部
//像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();
就是个例子...
这个你用数组做能去掉大小的弊端
//但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();
就是个例子...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询