MULE 通过HTTP进行文件上传

工具版本
mule-standalone3.9.0
Anypoint-Studio6.4.0
Postman6.2.5

写在前面
今天想起来还没有尝试过Mule的文件上传,毕竟上传文件是一个很常见的功能了,因此实践做一个Mule文件上传的示例。使用Postman能够很轻松地模拟前台表单上传文件的过程。

首先看一下Mule接收文件是怎么样的

在Logger组件打了一个断点,为了方便观察通过HTTP组件接收文件后Message里面放了什么东西。

在Postman中选择合适的方式上传名为1.jpg的图片,点击发送

上面断点已经定位了文件上传的关键就是inboundAttachments属性里面,因此往下就要对这个属性干点事情。
同时如果留意Logger组件里面的内容,实际上并不能发现到什么东西

因为当前payload是空的,唯一有所关联的地方就是看到Content-Type是文件上传时需要设置的格式。

因此接下来使用一个Java Transformer来接着处理

package test;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.activation.DataHandler;

import org.apache.log4j.Logger;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.module.http.internal.multipart.HttpPart;
import org.mule.module.http.internal.multipart.HttpPartDataSource;
import org.mule.transformer.AbstractMessageTransformer;
/**
 * 上传文件处理
 * @author CGYDAWN
 * @date 2018-09-06
 */
public class FileUploadTransformer extends AbstractMessageTransformer {
    private static final Logger logger = Logger.getLogger(FileUploadTransformer.class);
    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
        //file是表单文件上传所设置的name值
        DataHandler dataHandler = message.getInboundAttachment("file");
        HttpPartDataSource dataSource = (HttpPartDataSource)dataHandler.getDataSource();
        HttpPart httpPart = (HttpPart)dataSource.getPart();
        String contentDisposition = httpPart.getHeader("Content-Disposition");
        String fileName = contentDisposition.substring(contentDisposition.indexOf("filename=\"") + 10,contentDisposition.lastIndexOf("\""));
        String receivePath = "D:\\workshop\\mule\\test\\src\\main\\resources\\";
        File file = new File(receivePath+fileName);
        // JDK1.7支持的自动释放资源try(){}catch{}语法
        try(FileOutputStream fos = new FileOutputStream(file);
                ByteArrayInputStream is = (ByteArrayInputStream)dataSource.getInputStream();) {
            int length = 0;
            byte[] bytes = new byte[1024];
            while ((length = is.read(bytes, 0, bytes.length)) != -1) {
                fos.write(bytes);
                fos.flush();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

}


可以看到图片已经在所设置的src/main/resource路径下

至此就成功实践了在Mule中上传图片的功能了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值