用mule实现FTP文件上传

 功能: 将某个文件放入特定的目录里(本demo是放入e:/temp目录), 然后将该文件上传到FTP上, 并且发送电子邮件通知文件已经上传

-------------------------------------------------第一步----------------------------------------------------------------------
首先写配制文件

                                "http://mule.mulesource.org/dtds/mule-configuration.dtd">


 File upload via FTP

 
  
   
   
  

 

 
  
   
   
   
   
   
  

 

 
  
   
   
  

 

 
  
  
  
 

 
   
                    returnClass="java.lang.String"/>
                 returnClass="javax.mail.Message"/>
   

 
 
 
  
   
    
   

   
    
     
      
       
      

     

     
    

   

  

  
 

这里需要对这段配制进行一些说明:
   
    
     
      
       
      

     

     
    

   

这里采用MulticastingRouter的方法,来实现发送到多个endpoint, 第一个是实现将文件写到FTP, 第二个是实现电子邮件的发送

-------------------------------------------------第二步----------------------------------------------------------------------
service.FtpUpload文件
package service;

import java.util.HashMap;
import java.util.Map;

import org.mule.umo.UMOEventContext;
import org.mule.umo.UMOMessage;
import org.mule.umo.lifecycle.Callable;

public class FtpUpload implements Callable {

 public Object onCall(UMOEventContext eventContext) throws Exception {
  UMOMessage message = eventContext.getMessage();
  //获取文件名
  String fileName =message.getProperty("originalFilename").toString();
  byte[] buf = message.getAdapter().getPayloadAsBytes();
  return buf;
 }
}

这个类是对e:/temp目录的监听,一旦有文件到达该目录后,就会将这个文件以byte[]的形式放入UMOMessage里


-------------------------------------------------第三步----------------------------------------------------------------------
transformer.SendMail文件

package transformer;

import org.mule.impl.RequestContext;
import org.mule.transformers.AbstractTransformer;
import org.mule.umo.UMOEventContext;
import org.mule.umo.UMOMessage;
import org.mule.umo.transformer.TransformerException;

public class SendMail extends AbstractTransformer {
 
 public SendMail(){
  super();
//  this.registerSourceType(byte.class);
 }

 @Override
 protected Object doTransform(Object src, String encoding)
   throws TransformerException {

  UMOEventContext eventContext= RequestContext.getEventContext();
  UMOMessage message = eventContext.getMessage();
  String fileName =message.getProperty("originalFilename").toString();
  
  return "you have received a email named "+fileName;
 }
}

注意:
1. 这个类并不是实现转换目的,而是实现构造电子邮件内容的功能
2. 这个类返回的是String类型, 但是smtp要求被发送的邮件是javax.mail.Message, 所以还要进行一个转换--stringToEmailMessage它使用了mule本身的org.mule.providers.email.transformers.StringToEmailMessage类
3. 这样写是不支持中文的,因为mule本身是用ISO-8859-1, 所以还得做相应的调整,这将会在以下的详解中提到

-------------------------------------------------第三步----------------------------------------------------------------------
写一个main函数, 这个主要的作用是方便调试
 public static void main(String[] args) throws Exception {
  String rootPath = System.getProperty("user.dir");
  String filePath = rootPath +"//conf//mule-ftp-upload-configl.xml";
        MuleXmlConfigurationBuilder builder = new MuleXmlConfigurationBuilder();
        builder.configure(filePath);
 }
下面就可以调试了.
-------------------------------------------------完成--------------------------------------------------------------------------


你可能感兴趣的:(技术文档)