public List parseRequest()

in commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java [461:509]


    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?
                    }
                }
            }
        }
    }