讨论一下吧:如何利用jsp或相关技术实现基于B/S的大文件上传 我发现,eyou的邮箱系统具有的网络存储功能,上传文件时,会开启一个自动刷新的页面,应该是凭借这个页面的刷新同服务器端通信,保证连接的有效性,以实现大文件的上传。不知道大家什么想法?有没有更实际的解决方案或伪代码、代码?欢迎讨论,顶者有分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1 从协议上讲,一旦数据开始传输到服务器,连接就将一直有效,不会无故的断掉2 那个刷新页面,主要是因为我们上传速度太慢了,时间太长,session已经超时,造成虽然你前面upload页面成功,但其它页面你不能使用了,需要再次登陆。也就没有意义了。3 Ajax可以更简单些。 prototype 的 PeriodUpdate 可以定时的调用服务器的页面,来保证session的有效性。 请问java2000_net ,能否详细一点?谢谢! 1 上传提交的时候,先open一个窗口用于刷新啦2 新窗口调用new Ajax.PeriodUpdater(......具体的使用,去查 prototype 的手册吧!www.prototypejs.org 好像听说用Ajax比较好点,我没有试过 没有看过你说的那个系统,新开一个窗口间隔的刷新,一来可以保持session,二来可以刷新进度条(如果有进度条)。 我用webwork实现过。使用的是Jakarta的文件上传组建。实现它的ProgressListenner后,可以获取上传进度。public class FileUploadListener implements ProgressListener{ ... private HtttpSession session; public FileUploadListener(HttpServletRequest servletRequest){ super(); this.session = servletRequest.getSession(); } public void update(long pBytesRead,long pContentLength,int pItems){ ... FileUploadMessage message = (FileUploadMessage)session.getAttribute("FileUploadMessage"); if(message == null)sesion.setAttribute("FileUploadMessage",new FileUploadMessage(pItems,pContentLength,pBytesRead)); else{ message.setItem(pItems); message.setReaded(pBytesRead); message.setTotal(pContentLength); ... } }}在JakataMultiPartRequest中加入Listener: ... ServletFileUpload upload = new ServeltFileUpload(fac); if(upload.getProgressListener()== null) upload.setProgressListener(new FileUploadListerner(servletRequest)); ...这样,就在jakarta的文件上传组建中植入了一个钩子,可以从session中得到文件上传进度。在action中需要两个方法,一个方法获取上传文件,一个获取文件上传进度。客户端,用iframe提交form.提交后,不断ajax请求上传进度(同时也起到了保持session有效的作用)。大致就是这样的。 jsp类似自定义标签的问题 dwr中如何传递List<Map>类型的参数 Object转xml字符串的时候的疑问,为什么..... Jasperreports求助~ 如何控制打印份数 ===有人用过IBM的AIX服务器吗? ACTIVEX的乱码问题 这个问题以前我也看过,但是始终没有成功!请各位帮帮忙 请高手指点!在线急等 100分---关于使用iText,在pdf中插入图片的问题,顶者有分 大家来讨论:JSP中如何实现报表打印功能??? Ajax乱码问题 JMail疑难问题 急
2 那个刷新页面,主要是因为我们上传速度太慢了,时间太长,session已经超时,造成虽然你前面upload页面成功,但其它页面你不能使用了,需要再次登陆。也就没有意义了。3 Ajax可以更简单些。 prototype 的 PeriodUpdate 可以定时的调用服务器的页面,来保证session的有效性。
2 新窗口调用
new Ajax.PeriodUpdater(......具体的使用,去查 prototype 的手册吧!www.prototypejs.org
实现它的ProgressListenner后,可以获取上传进度。public class FileUploadListener implements ProgressListener{
...
private HtttpSession session;
public FileUploadListener(HttpServletRequest servletRequest){
super();
this.session = servletRequest.getSession();
}
public void update(long pBytesRead,long pContentLength,int pItems){
...
FileUploadMessage message = (FileUploadMessage)session.getAttribute("FileUploadMessage");
if(message == null)sesion.setAttribute("FileUploadMessage",new FileUploadMessage(pItems,pContentLength,pBytesRead));
else{
message.setItem(pItems);
message.setReaded(pBytesRead);
message.setTotal(pContentLength);
...
}
}
}在JakataMultiPartRequest中加入Listener: ...
ServletFileUpload upload = new ServeltFileUpload(fac);
if(upload.getProgressListener()== null)
upload.setProgressListener(new FileUploadListerner(servletRequest));
...这样,就在jakarta的文件上传组建中植入了一个钩子,可以从session中得到文件上传进度。
在action中需要两个方法,一个方法获取上传文件,一个获取文件上传进度。
客户端,用iframe提交form.提交后,不断ajax请求上传进度(同时也起到了保持session有效的作用)。
大致就是这样的。