in commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java [456:504]
public List<I> parseRequest(final RequestContext requestContext) throws FileUploadException {
final List<I> itemList = new ArrayList<>();
var successful = false;
try {
final var fileItemFactory = Objects.requireNonNull(getFileItemFactory(), "No FileItemFactory has been set.");
final var buffer = new byte[IOUtils.DEFAULT_BUFFER_SIZE];
getItemIterator(requestContext).forEachRemaining(fileItemInput -> {
if (itemList.size() == fileCountMax) {
// The next item will exceed the limit.
throw new FileUploadFileCountLimitException(ATTACHMENT, getFileCountMax(), itemList.size());
}
// Don't use getName() here to prevent an InvalidFileNameException.
// @formatter:off
final var fileItem = fileItemFactory.fileItemBuilder()
.setFieldName(fileItemInput.getFieldName())
.setContentType(fileItemInput.getContentType())
.setFormField(fileItemInput.isFormField())
.setFileName(fileItemInput.getName())
.setFileItemHeaders(fileItemInput.getHeaders())
.get();
// @formatter:on
itemList.add(fileItem);
try (var inputStream = fileItemInput.getInputStream();
var outputStream = fileItem.getOutputStream()) {
IOUtils.copyLarge(inputStream, outputStream, buffer);
} catch (final FileUploadException e) {
throw e;
} catch (final IOException e) {
throw new FileUploadException(String.format("Processing of %s request failed. %s", MULTIPART_FORM_DATA, e.getMessage()), e);
}
});
successful = true;
return itemList;
} catch (final FileUploadException e) {
throw e;
} catch (final IOException e) {
throw new FileUploadException(e.getMessage(), e);
} finally {
if (!successful) {
for (final I fileItem : itemList) {
try {
fileItem.delete();
} catch (final Exception ignored) {
// ignored TODO perhaps add to tracker delete failure list somehow?
}
}
}
}
}