下载与上传如何在同一页面实现?(在线等,急!) ( 积分: 100 )

  • 主题发起人 主题发起人 bluesnow
  • 开始时间 开始时间
B

bluesnow

Unregistered / Unconfirmed
GUEST, unregistred user!
jsp页面上要下载文件,也要上传文件,都是调用后台servlet里函数实现,前台页面如果设置form的encType,就只能设multipart/form-data或其他的一种,在javascript里改form.encType也没用,所以,我就设成multipart/form-data,提交到中间页面后再根据提交的参数分别进行下载或上传,下载的时候再提交到另外一个中间页,将后台传来的结果形成文件:
response.reset();
response.setContentType("application/x-msexcel");
response.setHeader("Content-Disposition", "attachment;filename="
+ userName + ".csv");
PrintWriter po = response.getWriter();
po.println(addrTemp);
//addrTemp是后台传来的结果
po.flush();
po.close();
这样可以实现在同一页面上既可以上传文件又可以下载文件,但按上面的执行,可以保存文件,但保存完后就停留在第一个中间页面上,因为response好像不能再进行其他操作,我想让页面再回到第一个前台页面:
response.reset();
response.setContentType("text/html;charset=gb2312");
response.setHeader("pragma", "no-cache");
PrintWriter po = response.getWriter();
po.println(&quot;<script> window.history.go(-1);
</script>&quot;);
po.flush();
po.close();
如果在第一段代码下写这段,实际上不能执行!
希望高手明白我的意图,能帮帮小妹!如何实现输出文件后再让页面回退或指向一个给定的url?!先谢谢各位了!
 
jsp页面上要下载文件,也要上传文件,都是调用后台servlet里函数实现,前台页面如果设置form的encType,就只能设multipart/form-data或其他的一种,在javascript里改form.encType也没用,所以,我就设成multipart/form-data,提交到中间页面后再根据提交的参数分别进行下载或上传,下载的时候再提交到另外一个中间页,将后台传来的结果形成文件:
response.reset();
response.setContentType(&quot;application/x-msexcel&quot;);
response.setHeader(&quot;Content-Disposition&quot;, &quot;attachment;filename=&quot;
+ userName + &quot;.csv&quot;);
PrintWriter po = response.getWriter();
po.println(addrTemp);
//addrTemp是后台传来的结果
po.flush();
po.close();
这样可以实现在同一页面上既可以上传文件又可以下载文件,但按上面的执行,可以保存文件,但保存完后就停留在第一个中间页面上,因为response好像不能再进行其他操作,我想让页面再回到第一个前台页面:
response.reset();
response.setContentType(&quot;text/html;charset=gb2312&quot;);
response.setHeader(&quot;pragma&quot;, &quot;no-cache&quot;);
PrintWriter po = response.getWriter();
po.println(&quot;<script> window.history.go(-1);
</script>&quot;);
po.flush();
po.close();
如果在第一段代码下写这段,实际上不能执行!
希望高手明白我的意图,能帮帮小妹!如何实现输出文件后再让页面回退或指向一个给定的url?!先谢谢各位了!
 
保存后调用Redirect();
 
在第一段代码后加response.sendRedirect(...);
仍然不行!报错:java.lang.IllegalStateException
哪位高手能帮帮我啊!急死了快!:((
 
你的response.sendRedict的用法是不对的,在http 的协议中,所有的重定向工作都是在协议头进行的,所以在应用这个函数之前,你不应该插入输出的内容。
你可以分析一下以下这个例子:
<%@ page contentType=&quot;text/html&quot;
%>
<% int i=1;
%>
<%
if(i>0) response.sendRedirect(&quot;test.html&quot;);
else
%>
<html>
<head></head>
<title>
main
</title>
<body>
haha ,not redirect !!
<% response.sendRedirect(&quot;test1.html&quot;);
%>
</body>
</html>
改变 i 的值,可以执行不同的 语句, 当 i>0 时,程序肯定执行成功。
而 i<=0时,可能执行成功,也可能执行失败,这主要是由于服务的缓冲(不同的http server 处理方式不一样)引起的,实际上后面这种方式,在程序中不合适尽量不要采用。
另外 对于jsp的调试中:
1.分段调试,比如你要调试 sendRedirect 函数,你就不用放入那么多的代码,用谋一些变量替代即可,让后进行整体调试
2. 多了解jsp,servlet的执行原理,看看 jsp 形成临时 servlet 文件,这样更加可以得到程序错误的地方。
 
我整个project采用mvc模式, 上传的时候首页1.jsp将参数和文件内容提交到中间页mid.jsp,中间页用SmartUpload接收上传文件,传到model里进行处理调用后台函数记入数据库。而下载时,由于同在一个页面,我就也提交到中间页mid.jsp,mid.jsp提交后,后台根据处理的id号转入另一个model得到后台文件内容,传入output.jsp,output.jsp里的主要代码:
response.reset();
response.setContentType(&quot;application/x-msexcel&quot;);
response.setHeader(&quot;Content-Disposition&quot;, &quot;attachment;filename=&quot;
+ userName + &quot;.csv&quot;);
PrintWriter po = response.getWriter();
//addrTemp = new String(addrTemp.getBytes(&quot;gb2312&quot;),&quot;ISO-8859-1&quot;);
po.println(addrTemp);
po.flush();
po.close();
这就是保存文件的代码,执行后网页停留在中间页mid.jsp,而我想让它回到首页1.jsp。不知道如何实现
请高手加我的qq:86104688
 
都用application/x-msexcel形式提交,下载时将页面上需要的输入值用?当参数传入,model里可以取到。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部