Над imap im пытается получить вложения из нескольких сообщений. Он работает нормально, но если есть вложение с 20 мегабайтами, то он кажется застрявшим, и java не продолжается.Javamail - Как обрабатывать большие вложения?
Вот где проблема возникает: Я хочу, чтобы получить содержимое вложения и сохранить его в строку:
...
MimeBodyPart attachment = (MimeBodyPart) multipart.getBodyPart(1);
if(!Part.ATTACHMENT.equalsIgnoreCase(attachment.getDisposition())) {
log.error("Part is not an attachment!");
} else {
log.debug("Checking " + localFile.getName() + " with " + attachment.getFileName() + ". Attachment-Size: " + (attachment.getSize()/(1024*1024)) + " mega-bytes.");
InputStream remoteFileIs = attachment.getInputStream();
remoteFileContent = IOUtils.toString(remoteFileIs); //stucked here, when attachment is large
remoteFileIs.close();
...
}
...
Существует ли какое-либо решение этого?
С уважением!
Теперь он работает. Я установил выборку для props.put ("mail.imaps.fetchsize", "22020096"); который составляет 21 МБ. Это нормально? Есть ли недостатки, если размер выборки слишком велик? –
Вы будете использовать больше памяти, и вам придется дождаться загрузки всей части, прежде чем вы сможете ее обработать. Но все это было верно для вашего использования IOUtils.toString. –
@ Дайте вам размер выборки, размер которого не больше, чем вложение. это должен быть разумный «кусок», установить целевой размер, который будет загружен в течение короткого периода времени. я бы предложил менее 2 мб. – pstanton