【问题标题】:Apache Camel upload email attachment to ftpApache Camel 将电子邮件附件上传到 ftp
【发布时间】:2017-05-15 10:43:24
【问题描述】:

我正在使用以下处理器来获取电子邮件的第一个附件并将其上传到 ftp 服务器。

路线配置

<from uri="imaps://...
<to uri="ejb:java:global/Dms/MailProcessor"/>
<to uri="ftp://....

邮件处理器

@Named("MailProcessor")
@Stateless
public class MailProcessor implements Processor {

    @Override
    public void process(Exchange exchange) throws Exception {

        exchange.getOut().setHeaders(exchange.getIn().getHeaders());

        Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
        if (attachments.size() > 0) {
            for (String name : attachments.keySet()) {
                DataHandler dataHandler = attachments.get(name);

                // SET ATTACHMENT FILENAME TO OUTPUT FILENAME HEADER
                String filename = dataHandler.getName();
                filename = MimeUtility.decodeText(filename);
                exchange.getOut().setHeader("filename", filename);

                // SET INPUT ATTACHMENT TO OUTPUT BODY
                byte[] data = exchange.getContext().getTypeConverter().convertTo(byte[].class, dataHandler.getInputStream());
                exchange.getOut().setBody(data);

                // SET ONLY THE FIRST ATTACHMENT
                break;
            }
        }else{
            exchange.getOut().setBody(exchange.getIn().getBody());
    }

}

这在一般情况下有效,但对于“大”附件来说,它确实需要很长时间。 (仅 5 mb 的附件需要半小时)

日志

TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) Changing directory: upload
TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) doStoreFile(ID-example-local-59752-1494841993139-21-11)
DEBUG [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) About to store file: ID-example-local-59752-1494841993139-21-11 using stream: com.sun.mail.util.BASE64DecoderStream@601a11dc
TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) Client storeFile: ID-example-local-59752-1494841993139-21-11
 -- long pause --

我也尝试过像这样转换附件:

byte[] data = exchange.getContext().getTypeConverter().convertTo( byte[].class, dataHandler.getInputStream() );
exchange.getOut().setBody(data);

但这给了我以下信息:

2017-05-15 11:23:20,968 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Converting org.apache.camel.Processor$$$view63 -> org.apache.camel.Processor with value: Proxy for view class: org.apache.camel.Processor of EJB: MailProcessor
2017-05-15 11:23:20,968 TRACE [org.apache.camel.component.bean.BeanProcessor] (Camel (example) thread #133 - imaps://mail.example.com) Using a custom adapter as bean invocation: Proxy for view class: org.apache.camel.Processor of EJB: MailProcessor
2017-05-15 11:23:20,990 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Converting com.sun.mail.util.BASE64DecoderStream -> byte[] with value: com.sun.mail.util.BASE64DecoderStream@28442828
2017-05-15 11:23:20,990 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Using converter: StaticMethodTypeConverter: public static byte[] org.apache.camel.converter.IOConverter.toBytes(java.io.InputStream) throws java.io.IOException to convert [class com.sun.mail.util.BASE64DecoderStream=>class [B]
2017-05-15 11:23:20,990 TRACE [org.apache.camel.util.IOHelper] (Camel (example) thread #133 - imaps://mail.example.com) Copying InputStream: java.io.BufferedInputStream@24b2cffb -> OutputStream:  with buffer: 4096 and flush on each write false
-- long pause --

使用 Filezilla 上传到 ftp 服务器就像一个魅力。此外,当我在另一条路线(由文件上传触发)中使用 camel-ftp 时,上传到 ftp 服务器的速度非常快。 所以我有一种感觉,是依恋的转化让事情变慢了。

问题:

我的假设是否正确?如何加快速度?

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    解决方案是使用&lt;from uri="imaps://...&amp;mail.imaps.partialfetch=false

    https://community.oracle.com/thread/2604843?start=0&tstart=0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多