String szHref=request.getParameter("Href");
String path=request.getRealPath("");
//新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
//初始化
su.initialize(pageContext);
//设定contentDisposition为null以禁止浏览器自动打开文件,
//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,
//浏览器将用acrobat打开。
su.setContentDisposition(null);
//下载文件
//{{
//如果不用如下的,则response.getWriter(),因为这个方法是和response.getOutputStream()相冲突
//html这样的文档不能下载。
out.clear();
out = pageContext.pushBody();
//}}
String oFileName = new String(szHref.getBytes("gb2312"),"iso8859-1");
su.downloadFile(path+"\\DB\\UpLoad\\"+szHref,null,oFileName);
第二种方法 也不行。
//关于文件下载时采用文件流输出的方式处理:
response.reset();//可以加也可以不加
response.setContentType("application/x-download");
String filedownload = "文件的物理路径+文件名";
String filedisplay = "下载文件名";
response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
java.io.OutputStream outp = null;
java.io.FileInputStream in = null;
try
{
outp = response.getOutputStream();
in = new FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while((i = in.read(b)) > 0)
{
outp.write(b, 0, i);
}
outp.flush();
out.clear();
out = pageContext.pushBody();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(in != null)
{
in.close();
in = null;
}
//这里不能关闭
//if(outp != null)
//{
//outp.close();
//outp = null;
//}
}
两种方法保存时弹出一个保存框,正常的有 打开、保存、取消三个按钮,而我的没有打开。点保存后文件类型显示未知,文件名也不是我设置的文件名。下载下来后用文件的真实类型打开也没问题。怎样才能让保存框自动识别文件类型,文件名实我设置的那个文件名呢?希望大家不吝赐教
9 个解决方案
#1
何必用SmartUpload 呢?我做下载都是直接用流的方式输出就行了,至于文件名和类型需要设置http Header来解决。以下是下载一个xml的http头设置:
response.setHeader("Content-disposition", "attachment; filename=" + downloadName + ".xml");//设定输出文件头
response.setContentType("application/x-msdownload");//定义输出类型
response.setHeader("Content-disposition", "attachment; filename=" + downloadName + ".xml");//设定输出文件头
response.setContentType("application/x-msdownload");//定义输出类型
#2
我试过用流的方式写了,不行啊
#3
String filedisplay = "你的报表.xls";
/* 设置下载前的HTTP属性信息 */
response.setContentType("application/x-download");
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");//估计你少了这句
response.setHeader("Content-Disposition","attachment;filename=" + filedisplay);
//接下来就是你的write部分代码
/* 设置下载前的HTTP属性信息 */
response.setContentType("application/x-download");
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");//估计你少了这句
response.setHeader("Content-Disposition","attachment;filename=" + filedisplay);
//接下来就是你的write部分代码
#4
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
filedisplay = new String(filedisplay.getBytes("gb2312"),"iso8859-1");
我都试过,还是不行。
filedisplay = new String(filedisplay.getBytes("gb2312"),"iso8859-1");
我都试过,还是不行。
#5
一个问题问几次,别人也不好回答你,。。。。
#6
学习一样啦
#7
下载文件就那么大点事,自己多试试代码吧。
#8
lakesea
(飘渺海)
如果对我个人有意见,请私聊!如果没有什么实质性的解决方案请别回帖!谢谢理解!
(飘渺海)
如果对我个人有意见,请私聊!如果没有什么实质性的解决方案请别回帖!谢谢理解!
#9
3楼正解:
String file = new String(request.getParameter("file").getBytes("ISO-8859-1"), "GBK");
File in = new File(baseDir + file);
response.setContentType( "application/x-download ");
file = URLEncoder.encode(file,"UTF-8");//估计你少了这句
response.setHeader( "Content-Disposition", "attachment;filename=" + file);
就OK了!
String file = new String(request.getParameter("file").getBytes("ISO-8859-1"), "GBK");
File in = new File(baseDir + file);
response.setContentType( "application/x-download ");
file = URLEncoder.encode(file,"UTF-8");//估计你少了这句
response.setHeader( "Content-Disposition", "attachment;filename=" + file);
就OK了!
#1
何必用SmartUpload 呢?我做下载都是直接用流的方式输出就行了,至于文件名和类型需要设置http Header来解决。以下是下载一个xml的http头设置:
response.setHeader("Content-disposition", "attachment; filename=" + downloadName + ".xml");//设定输出文件头
response.setContentType("application/x-msdownload");//定义输出类型
response.setHeader("Content-disposition", "attachment; filename=" + downloadName + ".xml");//设定输出文件头
response.setContentType("application/x-msdownload");//定义输出类型
#2
我试过用流的方式写了,不行啊
#3
String filedisplay = "你的报表.xls";
/* 设置下载前的HTTP属性信息 */
response.setContentType("application/x-download");
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");//估计你少了这句
response.setHeader("Content-Disposition","attachment;filename=" + filedisplay);
//接下来就是你的write部分代码
/* 设置下载前的HTTP属性信息 */
response.setContentType("application/x-download");
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");//估计你少了这句
response.setHeader("Content-Disposition","attachment;filename=" + filedisplay);
//接下来就是你的write部分代码
#4
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
filedisplay = new String(filedisplay.getBytes("gb2312"),"iso8859-1");
我都试过,还是不行。
filedisplay = new String(filedisplay.getBytes("gb2312"),"iso8859-1");
我都试过,还是不行。
#5
一个问题问几次,别人也不好回答你,。。。。
#6
学习一样啦
#7
下载文件就那么大点事,自己多试试代码吧。
#8
lakesea
(飘渺海)
如果对我个人有意见,请私聊!如果没有什么实质性的解决方案请别回帖!谢谢理解!
(飘渺海)
如果对我个人有意见,请私聊!如果没有什么实质性的解决方案请别回帖!谢谢理解!
#9
3楼正解:
String file = new String(request.getParameter("file").getBytes("ISO-8859-1"), "GBK");
File in = new File(baseDir + file);
response.setContentType( "application/x-download ");
file = URLEncoder.encode(file,"UTF-8");//估计你少了这句
response.setHeader( "Content-Disposition", "attachment;filename=" + file);
就OK了!
String file = new String(request.getParameter("file").getBytes("ISO-8859-1"), "GBK");
File in = new File(baseDir + file);
response.setContentType( "application/x-download ");
file = URLEncoder.encode(file,"UTF-8");//估计你少了这句
response.setHeader( "Content-Disposition", "attachment;filename=" + file);
就OK了!