diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java index d27b2159d..542469ead 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java @@ -103,12 +103,11 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { protected void processUpload(HttpServletRequest request, String saveDir) throws FileUploadException, UnsupportedEncodingException { if (ServletFileUpload.isMultipartContent(request)) { - for (FileItem item : parseRequest(request, saveDir)) { + // Track all FileItem instances for comprehensive cleanup - addAll in case exception in for loop + allFileItems.addAll(parseRequest(request, saveDir)); + for (FileItem item : allFileItems) { LOG.debug("Found file item: [{}]", normalizeSpace(item.getFieldName())); - - // Track all FileItem instances for comprehensive cleanup - allFileItems.add(item); - + if (item.isFormField()) { processNormalFormField(item, request.getCharacterEncoding()); } else { diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java index 70eeb8e2a..3d0cdb8d7 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java @@ -76,10 +76,16 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { LOG.debug("Performing File Upload temporary storage cleanup."); for (List fileInfoList : fileInfos.values()) { for (FileInfo fileInfo : fileInfoList) { - File file = fileInfo.getFile(); - LOG.debug("Deleting file '{}'.", file.getName()); - if (!file.delete()) { - LOG.warn("There was a problem attempting to delete file [{}].", file.getName()); + try { + // catch any exceptions during cleanup to ensure all files are deleted. + File file = fileInfo.getFile(); + LOG.debug("Deleting file '{}'.", file.getName()); + if (!file.delete()) { + LOG.warn("There was a problem attempting to delete file [{}].", + file.getName()); + } + } catch (Exception e) { + LOG.warn("Error during cleanup of file item: [{}]", normalizeSpace(fileInfo.getOriginalName()), e); } } }