flea-jersey使用之文件上传接入

2023-11-06

引言

本文将要介绍 flea-jersey 提供的文件上传功能。

文件上传功能,需要引入 Flea RESTful 接口服务端和客户端依赖,详细如下所示:

1. 客户端依赖

	<!-- FLEA JERSEY CLIENT-->
    <dependency>
        <groupId>com.huazie.fleaframework</groupId>
        <artifactId>flea-jersey-client</artifactId>
        <version>2.0.0</version>
    </dependency>

2. 服务端依赖

	<!-- FLEA JERSEY SERVER-->
    <dependency>
        <groupId>com.huazie.fleaframework</groupId>
        <artifactId>flea-jersey-server</artifactId>
        <version>2.0.0</version>
    </dependency>

3. 文件上传接入讲解

Flea RESTful接口服务端和客户端接入,本篇博文不再赘述;可见笔者 flea-jersey 下的文章。

3.1 服务端上传资源定义

上传资源继承 FleaJerseyPostResource,该类定义可至GitHub查看 flea-jersey-server,具体如下所示:

@Path("upload")
public class UploadResource extends FleaJerseyPostResource {

}
public abstract class FleaJerseyPostResource extends FleaJerseyFPostResource implements JerseyPostResource {

    /**
     * @see JerseyPostResource#doPostResource(FleaJerseyRequest)
     */
    @Override
    public FleaJerseyResponse doPostResource(FleaJerseyRequest request) {
        return doResource(request);
    }

}
public abstract class FleaJerseyFPostResource extends Resource implements JerseyFileUploadResource {

    /**
     * @see JerseyFileUploadResource#doFileUploadResource(FormDataMultiPart)
     */
    @POST
    @Path("/fileUpload")
    @Override
    public FleaJerseyResponse doFileUploadResource(FormDataMultiPart formDataMultiPart) {
        return doCommonFileUploadResource(formDataMultiPart);
    }

}
public interface JerseyFileUploadResource {

    /**
     * <p> 处理文件上传POST资源数据 </p>
     *
     * @param formDataMultiPart 表单数据
     * @return 响应对象
     * @since 1.0.0
     */
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    FleaJerseyResponse doFileUploadResource(FormDataMultiPart formDataMultiPart);

}

上传资源,配置参考如下:
在这里插入图片描述

3.2 服务端文件上传服务定义

文件上传服务接口类,参考实现如下:

public interface IFleaUploadSV {

    /**
     * <p> 文件上传 </p>
     *
     * @param input 文件上传入参(包含上传鉴权令牌)
     * @return 文件上传出参(包含文件编号)
     * @throws Exception
     * @since 1.0.0
     */
    OutputFileUploadInfo fileUpload(InputFileUploadInfo input) throws Exception;
}

文件上传服务实现类,参考实现如下:

@Service
public class FleaUploadSVImpl implements IFleaUploadSV {

    private static final Logger LOGGER = LoggerFactory.getLogger(FleaUploadSVImpl.class);
    
    @Override
    public OutputFileUploadInfo fileUpload(InputFileUploadInfo input) throws Exception {

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("FleaUploadSVImpl#fileUpload(InputFileUploadInfo) Start");
        }

        String token = input.getToken();
        if (StringUtils.isBlank(token)) {
            // 入参【{0}】不能为空
            throw new ServiceException("ERROR-SERVICE0000000001", "上传鉴权令牌【token】");
        }

        FleaFileObject fileObject = FleaJerseyManager.getManager().getFileObject();
        String fileName = fileObject.getFileName();
        File uploadFile = fileObject.getFile();

        String fileId = DateUtils.date2String(null, DateFormatEnum.YYYYMMDD) + RandomCode.toUUID();
        IOUtils.toFile(new FileInputStream(uploadFile), "E:\\" + fileId + "_" +fileName);
        OutputFileUploadInfo outputFileUploadInfo = new OutputFileUploadInfo();
        outputFileUploadInfo.setFileId(fileId);

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("FleaUploadSVImpl#fileUpload(InputFileUploadInfo) Start");
        }
        return outputFileUploadInfo;
    }
}

文件上传服务,配置参考如下:
在这里插入图片描述

3.3 客户端文件上传配置

文件上传客户端,配置参考如下:
在这里插入图片描述

字段名 中文描述
client_code 客户端编码
resource_url 资源地址
resource_code 资源编码
service_code 服务编码
request_mode 请求方式
media_type 媒体类型
client_input 客户端业务入参
client_output 客户端业务出参

上述配置中 请求方式 为 fpost,这里定义为文件POST请求,可参考枚举类 RequestModeEnum

FPOST("FPOST", "com.huazie.fleaframework.jersey.client.request.impl.FPostFleaRequest", "文件POST请求")

文件POST请求具体实现,可至 GitHub查看 FPostFleaRequest

3.4 客户端文件上传调用

文件上传自测类,可至GitHub查看 JerseyTest

	@Test
    public void testUploadFile() {
        try {
            String clientCode = "FLEA_CLIENT_FILE_UPLOAD";

            InputFileUploadInfo input = new InputFileUploadInfo();
            input.setToken(RandomCode.toUUID());
			// 添加待上传文件至文件上下文对象中
            File file = new File("E:\\IMG.jpg");
            FleaJerseyManager.getManager().addFileDataBodyPart(file);

            FleaJerseyClient client = applicationContext.getBean(FleaJerseyClient.class);
			// 调用文件上传服务
            Response<OutputFileUploadInfo> response = client.invoke(clientCode, input, OutputFileUploadInfo.class);

            LOGGER.debug("result = {}", response);
        } catch (Exception e) {
            LOGGER.debug("Exception = ", e);
        }
    }

至此,文件上传已接入完毕,下篇博文将会讲解文件下载接入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flea-jersey使用之文件上传接入 的相关文章

  • 部署Oracle 19C RAC

    https www toutiao com i6879691817663595019 tt from weixin utm campaign client share wxshare count 1 timestamp 1602718612

随机推荐

  • 集成springSecurity遇到的跨域问题

    引言 该项目主要使用技术 sprinboot springSecurity vue 其它的技术就不介绍了 其中springSecurity是我参考网上的案例去进行的集成 虽然集成成功了 但是还不是太懂 下面就开始介绍一下我遇到的问题 问题重
  • Android开源框架之Fresco

    简介 Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库 可以从网络 本地存储和本地资源中加载图片 相对于ImageLoader 拥有更快的图片下载速度以及可以加载和显示gif图等诸多优势 是个很好的图
  • 医学生可以跨专业考计算机的专业,可以跨考医学研究生:2016跨专业考研需谨慎的专业解读:临床医学...

    每年的跨专业考研人群有很大一批 或是因为本专业就业不景气 或是因为不感兴趣等等 诸多原因导致跨专业考研的人很多 跨专业考研的难度比一般要大 主要因为起点不同 往往此类考生专业课的基础都很低 从头开始 压力很大 因此在选专业的时候一定要谨慎
  • python怎么输出图片_Python怎么输出图片且不保存

    Python怎么输出图片且不保存 一 输出本地图片 使用open 函数来打开图片 使用show 函数来显示图片 from PIL import Image img Image open d dog png img show 这种图片显示方式
  • 基于BP神经网络的2014世界杯比分预测

    写在前头 科学的方法 娱乐的心态 研究背景 众所周知 今年的世界杯比赛各种坑爹 看了那么多砖家点评就没人说准过 当然足球比赛中有太多的未知变量 如何选择这些变量就成为了预测比赛比分的关键 本文作者另辟蹊径 选用足彩比分赔率作为影响比赛走势的
  • Java DAO代码重构(连接池方式)

    DAO设计简化思路 首先初始化数据库连接池 使用Alibaba的Druid连接池 需先下载druid 1 x x jar包 public class JDBCUtil private static DataSource ds null 初始
  • SQLServer数据库漏洞

    一 SQLServer数据库提权前提条件 1 以管理员身份运行数据库服务 2 已经获得SQL数据库的sysadmin权限 3 可以连接数据库 二 通过存储过程进行提权 hydra工具介绍 L 指定用户名字典 P 指定密码字典 vV 输出破解
  • 与孩子一起学编程python_与的解释

    子集上 一 与 康熙筆画 4 部外筆画 3 廣韻 集韻 正韻 同與 說文 賜予也 一勺爲与 六書正譌 寡則均 故从一勺 與 古文 廣韻 弋諸切 正韻 弋渚切 集韻 韻會 演女切 音予 說文 黨與也 戰國策 是君以合齊與强楚 註 與 黨與也
  • 《算法导论》笔记(18) 最大流 含部分习题

    流网络 容量值 源结点 汇点 容量限制 流量守恒 反平行 超级源结点 超级汇点 Ford Fulkerson方法 残存网络 增广路径 最小切割定理 f是最大流 残存网络不包含增广路径 f 等于最小切割容量三者等价 基本的Ford Fulke
  • Vijava 学习笔记之(获取用户自定义规范相关信息)

    源代码 package com vmware customzation import com vmware util Session import com vmware vim25 CustomizationSpecInfo import
  • [CVPR2020]Attention-Guided Hierarchical Structure Aggregation for Image Matting

    论文 Attention Guided Hierarchical Structure Aggregation for Image Matting 代码 wukaoliu CVPR2020 HAttMatting 基于注意力引导的层次结构聚集
  • mycat分库分表

    一 拆分原理 数据节点 分片 主机 ip port 数据库组合起来就是一个数据节点 分库 垂直拆分 不同的表分到不同的数据节点 分表 水平拆分 同一张表按照一定的规则拆分到不同的数据节点 二 mycat逻辑图 应用连接mycat mycat
  • 【编程之路】面试必刷TOP101:堆、栈、队列(42-49,Python实现)

    面试必刷TOP101 堆 栈 队列 42 49 Python实现 42 用两个栈实现队列 小试牛刀 step 1 push操作就正常push到第一个栈末尾 step 2 pop操作时 优先将第一个栈的元素弹出 并依次进入第二个栈中 step
  • 梦幻西游两个不同服务器的名字出现在跨服华山,系统会怎么处理,梦幻西游跨服决战华山玩法介绍...

    梦幻西游跨服决战华山新玩法已经出来了 很多的玩家还不知道该如何玩 下面我们一起来看详细的内容介绍 活动时间 没有帮派竞赛的周五 周日 进入活动场地时间 19 00 比赛时间 19 30 22 00 等级限制 等级 55级 分组机制 根据玩家
  • DLL,SDK,API专业技术术语

    SDK software development kit 中文可译为 软件开发工具包 一般都是一些被软件工程师用于为特定的软件包 软件架构 硬件平台 操作系统等建立应用软件的开发工具的集合 通俗点是指由第三方服务商提供的实现软件产品某项功能
  • 腾讯toB“联合舰队”的秘密

    14 天高强度谈判 每天都从早 8 点持续到凌晨 3 点 郭浩哲和他的同事们敲定了一笔融资 投资方是腾讯 投资金额达到了 12 66 亿元人民币 即使在腾讯的投资历史上 这都不是一个小数额 但实际流程仅用时一个多月 多少让郭浩哲对巨头的速度
  • Eclipse 安装C++环境

    安装CDT插件 方法一 选择 help 安装新的软件 然后点击Add 给定名称为 CDT 添加地址 http download eclipse org tools cdt releases juno 点击FInish 等待安装完成 提示重启
  • 第一课:初识Java语言

    第一课 初识Java语言 一 了解Java的历史由来 1 为什么学习Java编程语言 1 首先要了解编程语言的流行趋势 Tiobe PYPL排行榜 2 在这些排行榜上 Java语言的流行程度都名列前茅 在Tiobe排行榜上 甚至常年 排名第
  • 854. 相似度为 K 的字符串

    对于某些非负整数 k 如果交换 s1 中两个字母的位置恰好 k 次 能够使结果字符串等于 s2 则认为字符串 s1 和 s2 的 相似度为 k 给你两个字母异位词 s1 和 s2 返回 s1 和 s2 的相似度 k 的最小值 示例 1 输入
  • flea-jersey使用之文件上传接入

    文件上传 引言 1 客户端依赖 2 服务端依赖 3 文件上传接入讲解 3 1 服务端上传资源定义 3 2 服务端文件上传服务定义 3 3 客户端文件上传配置 3 4 客户端文件上传调用 引言 本文将要介绍 flea jersey 提供的文件