有做过struts2文件上传进度条的大神么?
我按照网上的做法,为什么不能成功:
我编写一个类MyMultiPartRequest,实现 MultiPartRequest接口,并且把JakartaMultiPartRequest的代码全都拷贝过来,然后修改parseRequest方法。改后方法如下:
private List<FileItem> parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException {
DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);
ServletFileUpload upload = new ServletFileUpload(fac);
//添加监听器
upload.setProgressListener(new ProgressListener() {
@Override
public void update(long pBytesRead, long pContentLength, int pItems) {
int percent = (int) (((float)pBytesRead / (float)pContentLength) * 100);
ActionContext.getContext().getSession().put("process", percent + "%");//将进度百分比放到session中。
System.out.println("--------"+percent);//输出一下上传的进度
}
});
upload.setSizeMax(maxSize);
return upload.parseRequest(createRequestContext(servletRequest));
}
然后就是在struts.xml中配置该解析器:MyMultiPartRequest。如下:
<!--ProgressListener -->
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="requestParser"
class="com.gycenter.listener.MyMultiPartRequest" scope="default"/>
<constant name="struts.multipart.handler" value="requestParser" />
<!-- ProgressListener end -->
class="com.gycenter.listener.MyMultiPartRequest"是我上面那个解析器类所在的包路径
就这样了。然后前台我是使用ajax每隔一秒调用一个方法,这个方法就是去拿session中的那个上传的百分比 该方法如下:
public void uploadProgress(){
try {
String process = (String) ActionContext.getContext().getSession().get("process");
System.out.println("文件已经上传"+process);