MULE 通过HTTP进行文件上传

2024-02-14 17:50
文章标签 进行 http 上传 mule

本文主要是介绍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);@Overridepublic 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中上传图片的功能了

这篇关于MULE 通过HTTP进行文件上传的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709183

相关文章

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应