protected void populateAttachments()

in components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpBinding.java [97:150]


    protected void populateAttachments(HttpServletRequest request, Message message) {
        // check if there is multipart files, if so will put it into DataHandler
        if (request instanceof MultipartHttpServletRequest multipartHttpServletRequest) {
            File tmpFolder = (File) request.getServletContext().getAttribute(ServletContext.TEMPDIR);
            boolean isSingleAttachment = multipartHttpServletRequest.getFileMap() != null &&
                    multipartHttpServletRequest.getFileMap().keySet().size() == 1;
            message.setHeader(Exchange.ATTACHMENTS_SIZE, multipartHttpServletRequest.getFileMap().keySet().size());
            multipartHttpServletRequest.getFileMap().forEach((name, multipartFile) -> {
                try {
                    Path uploadedTmpFile = Paths.get(tmpFolder.getPath(), UUID.randomUUID().toString());
                    multipartFile.transferTo(uploadedTmpFile);

                    if (name != null) {
                        name = name.replaceAll("[\n\r\t]", "_");
                    }

                    boolean accepted = true;

                    if (getFileNameExtWhitelist() != null) {
                        String ext = FileUtil.onlyExt(name);
                        if (ext != null) {
                            ext = ext.toLowerCase(Locale.US);
                            if (!getFileNameExtWhitelist().equals("*") && !getFileNameExtWhitelist().contains(ext)) {
                                accepted = false;
                            }
                        }
                    }

                    if (accepted) {
                        AttachmentMessage am = new DefaultAttachmentMessage(message);
                        File uploadedFile = uploadedTmpFile.toFile();
                        am.addAttachment(name, new DataHandler(new CamelFileDataSource(uploadedFile, name)));

                        // populate body in case there is only one attachment
                        if (isSingleAttachment) {
                            message.setHeader(Exchange.FILE_PATH, uploadedFile.getAbsolutePath());
                            message.setHeader(Exchange.FILE_LENGTH, multipartFile.getSize());
                            message.setHeader(Exchange.FILE_NAME, multipartFile.getOriginalFilename());
                            if (multipartFile.getContentType() != null) {
                                message.setHeader(Exchange.FILE_CONTENT_TYPE, multipartFile.getContentType());
                            }
                            message.setBody(uploadedTmpFile);
                        }
                    } else {
                        LOG.debug(
                                "Cannot add file as attachment: {} because the file is not accepted according to fileNameExtWhitelist: {}",
                                name, getFileNameExtWhitelist());
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            });
        }
    }