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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估