jspSmartUpload问题,急等啊!谢谢!
大家好,我用的是jspSmartUpload上传文件,遇到一些问题,请指教!谢谢!
就是// 上传初始化 su.initialize(pageContext);报错!!!不知道代码哪里有问题!谢谢大家!
apply.jsp申请表
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
apply
</title>
</head>
<body bgcolor="#ffffff">
<FORM name="upload" ENCTYPE="multipart/form-data" METHOD=POST ACTION="aaaa.do?command=do_apply">
<table>
<tr>
<TD bgColor=#ffffff class="12">姓名 </TD>
<td width="42%" bgColor=#ffffff><input type="text" name="cname" maxlength="10"/>
</td>
</tr>
<TR>
<TD bgColor=#ffffff class="12">身份证号码 </TD>
<TD bgColor=#ffffff colSpan=2><INPUT type="text" name="csid">
</TD>
</TR>
<TR>
<TD bgColor=#ffffff class="12">电话 </TD>
<TD bgColor=#ffffff colSpan=2><INPUT type="text" name="ctel">
</TD>
</TR>
<tr>
<td>添加附件</td>
<td><div><input type="file" name="cisdjpg"/>
</div></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="确定"/></td>
</tr>
</table>
</form>
</body>
</html>
aaaaAction里面的apply方法:
import^^^^^^^^^^^^^^^^^^^^^
public class aaaaAction extends DispatchAction {
public ActionForward applyPersonEseal(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, SmartUploadException{
CustomerDao customerdao = new CustomerDao();
Customer customer = new Customer();
String cname = httpServletRequest.getParameter("cname");
String csid = httpServletRequest.getParameter("csid");
String ctel = httpServletRequest.getParameter("ctel");
String csidpath="/upload/"+"CSID-"+csid;
/////////////////////////////////////////////////////////
try {
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initialize(pageContext);??????????????????有错???
// 设定上传限制
// 1.限制每个上传文件的最大长度。
// su.setMaxFileSize(10000);
// 2.限制总上传数据的长度。
// su.setTotalMaxFileSize(20000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
// su.setAllowedFilesList("doc,txt");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat, jsp,htm,html扩展名的文件和没有扩展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录
int count = su.save("/upload");
System.out.println(count+"个文件上传成功!<br>");
// 利用Request对象获取参数之值
System.out.println("TEST="+su.getRequest().getParameter("TEST") +"<BR><BR>");
// 逐一提取上传文件信息,同时可保存文件。
for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
// 若文件不存在则继续
if (file.isMissing()) continue;
// 显示当前文件信息
System.out.println("<TABLE BORDER=1>");
System.out.println("<TR><TD>表单项名(FieldName)</TD><TD>" + file.getFieldName() + "</TD></TR>");
System.out.println("<TR><TD>文件长度(Size)</TD><TD>" + file.getSize() + "</TD></TR>");
System.out.println("<TR><TD>文件名(FileName)</TD><TD>" + file.getFileName() + "</TD></TR>");
System.out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>" + file.getFileExt() + "</TD></TR>");
System.out.println("<TR><TD>文件全名(FilePathName)</TD><TD>" + file.getFilePathName() + "</TD></TR>");
System.out.println("</TABLE><BR>");
// 将文件另存
// file.saveAs("/upload/" + myFile.getFileName());
// 另存到以WEB应用程序的根目录为文件根目录的目录下
// file.saveAs("/upload/" + myFile.getFileName(), su.SAVE_VIRTUAL);
// 另存到操作系统的根目录为文件根目录的目录下
// file.saveAs("c:\\temp\\" + myFile.getFileName(), su.SAVE_PHYSICAL);
}
customer.setCname(cname);//姓名
customer.setCsid(csid);//身份证
customer.setCtel(ctel);//电话
customer.setCtel(csidpath);//附件路径
customerdao.addOneCustomer(customer);
return actionMapping.findForward("success");
}
catch (Exception ex) {
}
return actionMapping.findForward("error_error");
}
}
问题点数:50、回复次数:15Top
1 楼yxhzj(余华[学习J2EE中])回复于 2005-05-27 17:27:15 得分 10
用strust,为什么还用这个组件
它不是用fileupload组件吗Top
2 楼bean5566(bean5566)回复于 2005-05-27 18:00:14 得分 0
哦,可是那个我没有用过啊?
Top
3 楼thinkway(思维)回复于 2005-05-27 18:04:12 得分 0
报的是什么错,帖出来看看Top
4 楼huguangwu(追风少年)回复于 2005-05-27 18:23:12 得分 0
com.jspsmart.upload.SmartUpload mySmartUpload=new com.jspsmart.upload.SmartUpload();
//初始化
mySmartUpload.initialize(pageContext);
//设置上载的最大值100M
mySmartUpload.setMaxFileSize(100 * 1024*1024);
//上载文件
mySmartUpload.upload();
这是我写的上传中的某一个文件中的代码,没有错啊,只不过我是jsp的Top
5 楼bean5566(bean5566)回复于 2005-06-01 13:52:54 得分 0
我是在 Struts的Actin里做的
// 上传初始化时有错
su.initialize(pageContext);??????????????????有错???
不知道在Action里怎么得到 pageContext????
各位大哥,请指教!!! 谢谢了!!!
Top
6 楼dujianmeng(heihei)回复于 2005-06-01 16:43:12 得分 20
在action,初始化不是这样的
:SmartUpload su = new SmartUpload();
ServletConfig config = servlet.getServletConfig();
su.initialize(config,servletRequest,servletResponse);Top
7 楼zzxhunter(宝蓝)回复于 2005-06-01 18:48:59 得分 0
SmartUpload可以上传大文件吗??????我用它老是溢出.
用fileupload组件又太慢.
我的程序要求大文件上传.Top
8 楼bigdog001(大狗)回复于 2005-06-02 00:33:33 得分 5
SmartUpload是早期的一个文件上穿组件,在jsp中及servlet中均可以方便的使用:
1 jsp中的用法:
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
。。。
mySmartUpload.initialize(pageContext);
mySmartUpload.setTotalMaxFileSize(10000000);
mySmartUpload.upload();
。。。
2 Servlet中的用法:
SmartUpload mySmartUpload = new SmartUpload();
mySmartUpload.initialize(config,request,response);
mySmartUpload.setTotalMaxFileSize(10000000);
mySmartUpload.upload();
。。。
具体可以参看其标准example
至于效率问题,确实SmartUpload有先天不足,相信大家都看过其源码,针对上传的优化非常简单,对大文件的判断及处理有问题,完全是服务器端的内存能力处理。
其它备选方案:cos及apache组织的common-upload及基于common-upload之上的struts的upload解决方案。
cos方案也是比较经典的老牌upload组件,但是同jspsmartupload一样,存在一定的问题;
common-upload组件有两个重要的优点:
一是可以方便的实现大文件头预知(即如果上传的文件大于你所设置的最大文件尺寸,例如200m,那末可能在刚上传到1m的时候,已经得知文件头中文件的大小,并判断出非法上传,停止上传动作),这个功能在struts中体现,不过是模块的全局设置参数(个人觉得还可以改进);
二是可以实现写disk缓存,即如果上传文件大于全局设置的temp值(如2m),那末上传的文件流会写到默认或指定的temp目录去,而不是纯粹占用服务器的内存(可以设想用jspsmartupload上传一个1G的movie看看,在上传的过程中,服务器的内存消耗直线上升,直到1G,如果有多用户的并发,死机就难以避免了)。
Top
9 楼zzxhunter(宝蓝)回复于 2005-06-02 09:04:49 得分 0
bigdog001兄:fileupload上传怎么这么慢啊???我们在局域网,上传速度才140K啊!!!!
有办法更快吗??????????????????
如果你解决我的这个问题,送上500分,怎么样????????????Top
10 楼bigdog001(大狗)回复于 2005-06-02 12:18:32 得分 10
使用commons-fileupload的基本常识:
FileUpload对象的一些参数值—sizeMax、sizeThreshold、repositoryPath:
SizeMax 用来设置上传文件大小的最大值,一旦用户上传的文件大小超过该值时将会抛出一个FileUploadException异常,提示文件太大;
SizeThreshold 设置内存中缓冲区的大小,一旦文件的大小超过该值的时候,程序会自动将其它数据存放在repositoryPath指定的目录下作为缓冲。合理设置该参数的值可以保证服务器稳定高效的运行;
RepositoryPath 指定缓冲区目录。
想必这几个参数你肯定不会写错吧?
其它原因:
1 防病毒软件的问题
在上传过程中,防病毒软件发现服务器上的文件改变,so实时去scan了,导致缓慢;
2 网络因素
看看本地上传与远程上传有无区别,有可能是网络设备配置的问题。
重点关注方面:
个人觉得上传的速度主要取决于SizeThreshold参数,默认是4096,即大概4k;
但是这个数值建议更改为256 * 1024,即256k
利用commons-fileupload的struts的上传速度快很多,实际上就是在struts的CommonsMultipartRequestHandler文件中默认的SizeThreshold参数提高为256k。
Top
11 楼zzxhunter(宝蓝)回复于 2005-06-02 12:41:28 得分 0
bigdog001兄:我的设置没有问题:
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节
fu.setSizeMax(1000*1024*1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(1*1024*1024);//1M
但是还是很慢,一个50M的文件上传最少要5分钟!就是平均没分钟不到10M.这样的速度客户无法满意.
还有没有其他的可能?????需要设置SocketSendBufferLength吗(Winsock 进行通信时的发送缓冲区)??
我设置了还是没用;我把杀毒软件全关了.网络是局域网.
如果你能帮我解决这个问题,当重谢!!决不食言!!!!Top
12 楼bluebillow()回复于 2005-06-02 13:45:09 得分 0
bigdog001:
SizeMax 设置上传文件大小的最大值,一旦用户上传的文件大小超过该值时将会抛出一个FileUploadException异常,提示文件太大;
用捕获异常来控制大文件上传,这样做很不理想,
能不能详细讲下
common-upload组件有两个重要的优点:
一是可以方便的实现大文件头预知(即如果上传的文件大于你所设置的最大文件尺寸,例如200m,那末可能在刚上传到1m的时候,已经得知文件头中文件的大小,并判断出非法上传,停止上传动作),这个功能在struts中体现,不过是模块的全局设置参数(个人觉得还可以改进);
希望能给点知道指导
多谢
Top
13 楼btk_hwt()回复于 2005-06-02 14:48:02 得分 0
文件上传
学习一下Top
14 楼kingbug(上帝是个程序员)回复于 2005-06-02 18:15:01 得分 0
http://blog.csdn.net/kingbug/Top
15 楼jxufe_lw()回复于 2005-06-02 19:00:51 得分 5
1 jspsmartupload 的网站都没了,没人支持了
2 上传大文件,内存益出
不过上传图片还是很快的,如果想上传大文件,要改一下原代码;把内存释放掉
我感觉还是不要用为好!
Top
相关问题
- 急求jspSmartUpload包
- jspSmartUpload 上传问题。。很急。。俺在线等等等等等
- 关乎饭碗的焦急:关于jspsmartupload的问题,我会在线等待的。
- 怎么用servlet实现对jspsmartupload上传文件的引用???急!在线等!
- 100分!急!求jspSmartUpload组件!
- 100分!急!求jspSmartUpload组件!
- 急!有谁有jspSmartUpload组件?
- 急!一个关于jspSmartUpload在Solaris(Unix)上载路径设置的问题!?在线等待!
- 紧急,,关于jspSmartUpload上传问题
- 50分求jspSmartupload!!!!!!!!救命,急用



