第一步:新建三个类,这三个类我已经写好,就直接在下面下载附件好了。
ResourceFileUploadStatus.java ResourceProgressListener.java ResourceFileUploadStatusAction.java 如果是注解方式,一定要放在action 或 web 包内否则 struts2 扫描不到
第二步:修改org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest 的 parseRequest方法,加入以下代码。
ResourceProgressListener pListener = new ResourceProgressListener(servletRequest); upload.setProgressListener(pListener);
修改后为:
private List<FileItem> parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException { DiskFileItemFactory fac = createDiskFileItemFactory(saveDir); ServletFileUpload upload = new ServletFileUpload(fac); upload.setSizeMax(this.maxSize); ResourceProgressListener pListener = new ResourceProgressListener(servletRequest); upload.setProgressListener(pListener); return upload.parseRequest(createRequestContext(servletRequest)); }
然后在将修改的JakartaMultiPartRequest 放回原处,至此后台部分已经完成。
第三步:前台可用ajax 轮询访问
ResourceFileUploadStatusAction.java
便可得到已上传的bytes