Я хочу реализовать пользовательский Struts2 MultiPartRequest для реализации прогрессивной загрузки файлов, установив прослушиватель прогресса.
Я написал свой пользовательский FileUploadMultipartRequest , реализовав MultiPartRequest принадлежит Core-struts2.
public class FileUploadMultipartRequest implements MultiPartRequest {
static final Log log = LogFactory.getLog(MultiPartRequest.class);
// maps parameter name -> List of FileItem objects
private Map<String, List<FileItem>> files = new HashMap<String, List<FileItem>>();
// maps parameter name -> List of param values
private Map<String, List<String>> params = new HashMap<String, List<String>>();
// any errors while processing this request
private List<String> errors = new ArrayList<String>();
private long maxSize;
@Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE)
public void setMaxSize(String maxSize) {
this.maxSize = Long.parseLong(maxSize);
}
/**
* Creates a new request wrapper to handle multi-part data using methods adapted from Jason Pell's
* multipart classes (see class description).
*
* @param saveDir the directory to save off the file
* @param servletRequest the request containing the multipart
* @throws java.io.IOException is thrown if encoding fails.
*/
public void parse(HttpServletRequest servletRequest, String saveDir) throws IOException {
DiskFileItemFactory fac = new DiskFileItemFactory();
// Make sure that the data is written to file
fac.setSizeThreshold(0);
if (saveDir != null) {
fac.setRepository(new File(saveDir));
}
ProgressMonitor monitor = null;
// Parse the request
try {
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setSizeMax(maxSize);
monitor = new ProgressMonitor();
upload.setProgressListener(monitor);
servletRequest.getSession().setAttribute(ProgressMonitor.SESSION_PROGRESS_MONITOR, monitor);
...
}
}
...
}
И я устанавливаю свойства в struts.xml
<constant name="struts.multipart.parser" value="com.cloudlabz.service.web.action.FileUploadMultipartRequest " />
<constant name="struts.multipart.maxSize" value="504857600" />
Хотя я установил свой пользовательский MultipartRequestHandeler в struts.xml, ноТем не менее Struts 2 выполняет свой собственный JakartaMultiPartRequest (синтаксический анализатор Struts2 по умолчанию для обработки многочастного запроса), а не мой пользовательский класс FileUploadMultipartRequest.
Пожалуйста, предложите мне какой-нибудь способ его решения.