文章阅读
如何在jdiy框架环境中使用其它上传组件,如smartupload,common-upload等。
文章类别: JDiy常见问题解答  更新日期: 2014-05-09 15:32:26.0  点击次数:3157

环境描述:

  使用JDiy框架开发的用户,如果再使用其它类型的上传组件(例如smartuplpad, common-upload等)上传文件时,或通过request.getInputStream()获取流媒体数据时,无法正常取到数据,而在没有使用jdiy的项目中却可以正常使用.本文阐述如何在jdiy中通过第三方上传组件来处理上传.


问题原因与解决方法:

  由于上传二进制流的特殊性,同一个请求的流数据只能被读取一次:

  相信request.getInputStream()这个方法,大家都比较熟悉,它就是用来获取上传的二进制流数据的.也就是说,这个方法只能被读取一次.虽然大多数情况下我们并没有直接去调用这个方法,但是,只要用到了文件上传,无论您使用的是什么上传类,该上传类的底层代码都是通过getInputStream来获取上传数据的.

  在同一个Requeset请求作用域内,我们只能使用一个上传类,要不然,混合使用多个,将导致InputStream流被多次重复读取而产生错误!

  所以,在使用JDiy框架的时候也不例外,针对同一个request请求,您要么使用JDiy的方法来获取上传数据,要么使用第三方上传组件来获取上传数据,而不能将它们混合着调用.

  JDiy框架重写了HttpServletRequest类,极大的方便了用户对带附件上传的表单数据获取处理(以致于用户根本无需单独编写获取上传文件的代码).但如果您打算再用第三方上传组件, 在该Request请求作用域下,您必须从第三方上传组件中去获取那些提交过来的数据(否则将导致getInputStream()重复读取而产生错误).

因此,要使用第三方上传组件,在该Request请求作用域下,您不能再使用如下所示的这些方法(以避免流的重复读):

app.get(String)

app.get(String, String)

app.getFile(String)

app.getFileNames()

app.getClientFileName(String)

app.getContentType(String)

request.getParameter(String)

request.getParameterMap()

request.getParameterNames()

request.getParameterValues(String)

注:

其中app是通过App app=App.get()产生的对象实例,也就是JDiy的上传处理程序包含的方法;

request是HttpServletRequest对象实例.

[ 上一篇 为何web.xml中的welcome-file-list不能是Act… ]
鄂ICP备18006629号-1       鄂公网安备 42050302000160号


技术支持QQ:39886616 QQ群:7759217
联系JDiy作者: ziquee java/javascript WEB编程
E-mail:ziquee@abcbcd.com http://189.cn
*尊姓大名:

*电子邮箱:

*QQ号码:

*留言内容:
提交留言
取消
loading...
注:带"*"的为必填项。请如实填写您的E-mail或QQ号码以便我们能与您取得联系。