在web中实现文件的上传下载
时间:2006-03-19 来源:amityboy
这段时间一直在进行一个项目的维护和升级。这两天一直在为系统中的文件上传和下载功能伤脑筋。原系统基本实现了文件的上传功能,但对于下载功能仅仅是通过一个简单的href连接来实现的,过于简单,而且对于包含中文的路径名也无法支持。
实现其下载功能,我主要遇到三方面的问题:
1. jspSmartUpload.jar的应用。
2. JSP页面的包含汉字的参数的传递问题。
3. JSP页面下载中出现的异常问题:“Java.lang.IllegalStateException:getOutputStream() has already been called for this response”。
上述的三个问题在以下的专题中都找到了解决的方法:
1.jspSmartUpload上传下载全攻略 http://www.knowsky.com/3136.html
文章对jspSmartUpload的安装、类和方法都进行了详细的说明,并给出了应用实例。文章最后针对汉字编码问题,作者对类SmartUpload的downloadfile方法进行了扩展。
2.java中文问题综述 http://www.farwen.com/ReadNews.asp?NewsID=2981
详细说明了java中所遇到的中文编码问题和解决的办法,当然也包含了我所遇到的问题。
3.jsp中文处理问题实例详解 http://www.54master.com/bbs/cgi-bin/topic.cgi?forum=14&topic=10926
这篇文章对编码问题进行了较为细致的研究,并给出了研究的方法,对于认识汉字编码问题有很大的帮助,我个人比较喜欢这篇文章。
4.getOutputStream() has already been called 解决方法 http://www.gissky.net/blog/more.asp?name=hauf&id=9894
这个帖子内容很少,却帮我解决了问题,呵呵,喜欢这样的帖子,就怕那中写了很长,却还解决不了问题,更是不知所云的帖子。
这个帖子内容直接剪贴到下面了:
加上response.reset(),并且所有的%>后面不要换行,包括最后一个。因为application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,就会发生:getOutputStream() has already been called for this response的错误详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。 |
相关阅读 更多 +