jsp重定向弹出文件另存为的对话框!!!

sunyaomingdddd 2007-04-24 04:02:44
我在a.jsp用response.sendRedirect("http://127.0.0.1:8080/abc/123.jpg");
在浏览器打开了一个url=http://127.0.0.1:8080/abc/123.jpg的网页,上面显示了123.jpg,我想在打开该下载链接的同时弹出保存该文件的对话框,想网上下载文件一样,还可以选择保存路径,应该怎么弄呢? 不打开网页,直接弹出保存对话框也可以,请高手指点呀...

在线等...
...全文
853 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaronyy2002 2007-04-25
  • 打赏
  • 举报
回复
问题很简单
你的语法出错了
response.setContentType("text/html");
你看看你的servlet中上面的那行代码是不是少了""?
即response.setContentType(text/html);
njp20033266njp 2007-04-25
  • 打赏
  • 举报
回复
response.setHeader("Content-Disposition",
"attachment; filename="+ str+".jpg");
sunyaomingdddd 2007-04-25
  • 打赏
  • 举报
回复
问题已经解决了,还是<%%>的问题.
sunyaomingdddd 2007-04-25
  • 打赏
  • 举报
回复
感谢楼上两位的相助!

response.setHeader("Content-Type","application/file");
response.addHeader("Content-Disposition","filename=str");
这个方法应该行不同,不管怎么样response作用的都是a.jsp,
所以我用了smartupload公用组件来进行下载:

String str="D:/Tomcat 5.5/webapps/ROOT/abc/upload/"+ps;
String Path= new String(str.getBytes("GBK"),"UTF-8");
java.io.File dir=new java.io.File(Path);
if(dir.exists()){ //判断路径是否存在
SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.setContentDisposition(null); //设定contentDisposition为null以禁止浏览器自动打开文件,保证点击链接后是下载文件
su.downloadFile(Path,"application/x-msdownload");


可是出了问题,
问题一:必须指定文件的绝对路径,这样就只能在本机下载了吧,我的a.jsp和upload文件夹在同一目录下啊,upload里是供下载的文件,为什么我不能指定"/upload/"+ps呢?这样就可以在其他机器上来访问下载了.

问题二:
下载一些jpg,mp3等格式文件时可以,但是有些jpg和gif文件下载时报错(%>之间没有空格我也注意到了,而且a.jsp是纯java代码,不含html<%):

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: getOutputStream() has already been called for this response
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.catalina.connector.Response.getWriter(Response.java:599)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:195)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:182)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
org.apache.jsp.bem.manage.counter_jsp._jspService(counter_jsp.java:179)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.20

谁能帮我解决一下啊...
sunyaomingdddd 2007-04-24
  • 打赏
  • 举报
回复
绝望中ing
sunyaomingdddd 2007-04-24
  • 打赏
  • 举报
回复
<a href="http://127.0.0.1:8080/abc/123.jpg">下载图片123.jpg</a>跟返回该链接是一样的结果,我用的是maxthon浏览器,ie也试过不行,而且那样不能进行下载统计了,棘手啊.
sunyaomingdddd 2007-04-24
  • 打赏
  • 举报
回复
不行啊,
我是在b.jap点下载链接"a.jsp?pid=20070001262"
pid=20070001262为文件的id
然后我在a.jsp进行统计后,
String ps=sqlRst.getString( "T_filename ");
String str= "http://127.0.0.1:8080/abc/ "+ps;

用response.sendRedirect("str");只能返回一个如ur=http://127.0.0.1:8080/abc/123.jpg的网页,而用
response.setHeader("Content-Type","application/file");
response.addHeader("Content-Disposition","filename=str");
只能弹出保存a.jsp文件的对话框(把a.sjp类型设置成了下载形式吧),这也不是我想要的,我把str改为"http://127.0.0.1:8080/abc/",也不行.
dr_lou 2007-04-24
  • 打赏
  • 举报
回复
<a href="http://127.0.0.1:8080/abc/123.jpg">下载图片123.jpg</a>
zzxiaoma 2007-04-24
  • 打赏
  • 举报
回复
用这个地址http://127.0.0.1:8080/abc/看看
sunyaomingdddd 2007-04-24
  • 打赏
  • 举报
回复
String ps=sqlRst.getString("T_filename");
String str="http://127.0.0.1:8080/abc/"+ps;

response.setHeader("Content-Type","application/file");
response.addHeader("Content-Disposition", "filename=str");
我用该方法是弹出的是保存文件str的对话框,晕了

有人在吗?帮帮我啊,谢谢了...

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧