关于jspsmartupload组件使用的一些经验 <<jspSmartUpload上传下载全攻略>>纠错

jspSmartUpload上传下载全攻略: http://www.knowsky.com/3136.html
这则帖子介绍了这个组建的基本用法。

以下是我的一些使用经验:
1.<<jspSmartUpload上传下载全攻略>>下载的例子中如果把su.setContentDisposition(null)注释掉,那么response头中:
Content-Disposition: filename=test.doc
Content-Type: application/x-msdownload;charset=gb2312
浏览器(如IE)会直接将下载的东西打开在内嵌的word程序中。

如果没有注释掉,则response头中:
Content-Disposition: attachment; filename=test.doc
Content-Type: application/x-msdownload;charset=gb2312
多了"attachment; ",浏览器会弹出一个对话框,让用户选择直接打开该文件还是保存下来等。

2.<<jspSmartUpload上传下载全攻略>>下载的例子中提到:

注意,执行下载的页面,在Java脚本范围外(即<% ... %>之外),不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。不信的话,可以在上述源码中%><%之间加入一个换行符,再下载一下,保证出错。因为它影响了返回给浏览器的数据流,导致解析出错。

经过试验,并不正确,即使在%><%之间加上空行、<html>等都不会出错(这些加上的东西被丢弃掉了,没有在response中返回)。原因是jsp中的out对象是个JspWriter,而JspWriter默认是处于buffer模式,且autoFlush="true",输出少量的空行、<html>等字符不足以撑满一个buffer,所以JspWriter还不会调用response.getWriter()去创建JspWriter需要关联的PrintWriter对象(参见JspWriter api doc)。而在do_download.jsp接下来的代码中,su.downloadFile()中却调用了response.getOutputStream(),输出了整个文件内容,因此jsp中的out中的内容会被丢弃而不会输出。

3.<<jspSmartUpload上传下载全攻略>>中:
SmartUpload类的getSize()方法返回的是请求内容的总长度,而不是“上传文件数据的总长度”。

4. jspsmartupload存在的问题:
(1)对中文支持的不足(文件名中含中文的文件的上传、下载等);
(2)容易出现OutOfMemoryError,因为SmartUpload类在upload()方法中会将请求的内容一次性全部读入到内存:
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
(3)功能较简单,编程实现上不够正规。

因此,不推荐再使用jspsmartupload组件,应该转而使用apache的commons fileupload, struts中的实现或一些ajax框架中的实现等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值