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);
}
});
}
}