我现在用jsp实现一个文件下砸功能,点击下载连接或。弹出一个保存框,正常的应该有 打开、保存、取消三个按钮,而我的没有打开按钮。并且点保存后文件类型显示未知,文件名也不是我设置的文件名。下载下来后用文件的真实类型打开也没问题。怎样才能让保存框自动识别文件类型,文件名实我设置的那个文件名呢?希望大家不吝赐教
第一种方法试过了,不行。
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;
//}
}
快崩溃了,网上找了很多资料,按着他们说的都不行啊。。谢谢大虾们之招啊
真是各有所需呀,还有人正好想要你的效果呢。
response.setContentType("application/octet-stream");
“application/octet-stream” 这个文件MIME写正确 试试