flea-jersey使用之文件下载接入

简介: 本文介绍了Flea框架的子模块flea-jersey提供的文件下载功能

)

image.png

引言

本文将要介绍 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 服务端下载资源定义

下载资源 DownloadResource 继承文件GET资源 FleaJerseyFGetResource ,用于实现文件下载功能

@Path("download")
public class DownloadResource extends FleaJerseyFGetResource implements JerseyPostResource {

    /**
     * @see JerseyPostResource#doPostResource(FleaJerseyRequest)
     */
    @Override
    public FleaJerseyResponse doPostResource(FleaJerseyRequest request) {
        return doResource(request);
    }
}
public abstract class FleaJerseyFGetResource extends Resource implements JerseyFileDownloadResource {

    /**
     * @see JerseyFileDownloadResource#doFileDownloadResource(String)
     */
    @GET
    @Path("/fileDownload")
    @Override
    public FormDataMultiPart doFileDownloadResource(@QueryParam("REQUEST") String requestData) {
        return doCommonFileDownloadResource(requestData);
    }

}
public interface JerseyFileDownloadResource {

    /**
     * <p> 处理文件下载资源数据 </p>
     *
     * @param requestData 请求数据字符串
     * @return Jersey响应对象
     * @since 1.0.0
     */
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Produces(MediaType.MULTIPART_FORM_DATA)
    FormDataMultiPart doFileDownloadResource(String requestData);
}

下载资源,配置参考如下:

image.png

3.2 服务端文件下载服务定义

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

public interface IFleaDownloadSV {

    /**
     * <p> 文件下载 </p>
     *
     * @param input 文件下载业务入参
     * @return 文件下载业务出参
     * @throws Exception
     * @since 1.0.0
     */
    OutputFileDownloadInfo fileDownload(InputFileDownloadInfo input) throws Exception;
}

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

@Service
public class FleaDownloadSVImpl implements IFleaDownloadSV {

    private static final Logger LOGGER = LoggerFactory.getLogger(FleaDownloadSVImpl.class);

    @Override
    public OutputFileDownloadInfo fileDownload(InputFileDownloadInfo input) throws Exception {

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("FleaDownloadSVImpl#fileDownload(InputFileDownloadInfo) Start");
        }

        File file = new File("E:\\IMG.jpg");
        // 将文件添加到文件上下文中
        FleaJerseyManager.getManager().addFileDataBodyPart(file);

        OutputFileDownloadInfo output = new OutputFileDownloadInfo();
        output.setUploadAcctId("121212");
        output.setUploadSystemAcctId("1000");
        output.setUploadDate(DateUtils.date2String(null, DateFormatEnum.YYYYMMDDHHMMSS));

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("FleaDownloadSVImpl#fileDownload(InputFileDownloadInfo) End");
        }

        return output;
    }
}

文件下载服务,配置参考如下:

image.png

3.3 客户端文件下载配置

文件下载客户端,配置参考如下:

image.png

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

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

FGET("FGET", "com.huazie.fleaframework.jersey.client.request.impl.FGetFleaRequest", "文件GET请求")

文件GET请求具体实现,可至 GitHub查看 FGetFleaRequest

3.4 客户端文件下载调用

文件下载自测类,可至GitHub查看 JerseyTest

  @Test
    public void testDownloadFile() {
        try {
            String clientCode = "FLEA_CLIENT_FILE_DOWNLOAD";

            InputFileDownloadInfo input = new InputFileDownloadInfo();
            input.setToken(RandomCode.toUUID());

            FleaJerseyClient client = applicationContext.getBean(FleaJerseyClient.class);

            Response<OutputFileDownloadInfo> response = client.invoke(clientCode, input, OutputFileDownloadInfo.class);

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

            OutputFileDownloadInfo output = response.getOutput();

            // 获取文件信息
            FleaFileObject fileObject = FleaJerseyManager.getManager().getFileObject();
            String fileName = fileObject.getFileName();
            File downloadFile = fileObject.getFile();

            String uploadSystemAcctId = output.getUploadSystemAcctId();
            String uploadAcctId = output.getUploadAcctId();
            String uploadDate = output.getUploadDate();

            if (downloadFile.exists()) {
                IOUtils.toFile(new FileInputStream(downloadFile), "E:\\" + uploadDate + "_" + uploadSystemAcctId + "_" + uploadAcctId + "_" + fileName);
            }

        } catch (Exception e) {
            LOGGER.error("Exception = ", e);
        }
    }

总结

至此,文件下载接入告一段落;

欢迎了解 [flea-jersey] 其他内容 。

目录
相关文章
|
存储 人工智能 运维
ChaosMeta for AI:混沌工程让AI稳定性更上一层楼
1.混沌工程不仅仅是技术过关的利器,更是AI系统完美运转的“防火墙”。ChaosMeta通过全方位、多层次的故障注入和演练,帮助AI系统在复杂多变的环境中维持高稳定性。 2.结合混沌工程的思想,我们不仅可以在开发阶段找到和修复问题,还能在运维阶段持续提升系统的鲁棒性。在这个高速发展的AI年代,ChaosMeta将为AI系统提供稳定性保障,让AI系统走得更远、更稳。 3.抽空试试ChaosMeta,也许下一个故障发生时,你会发现,原来一切尽在掌握。
1243 0
ChaosMeta for AI:混沌工程让AI稳定性更上一层楼
|
运维 监控 安全
ops有多个,ops1或2等等,这些ops作用和定义是什么,只是跳转用的么?上限有多少个?
ops有多个,ops1或2等等,这些ops作用和定义是什么,只是跳转用的么?上限有多少个?
1532 0
|
安全 Shell 开发工具
在Android上使用qemu-user运行可执行文件
QEMU可以解释执行可执行程序。既然QEMU可以解释执行可执行程序,那么QEMU就能够知道执行了哪些指令,从而可以跟踪指令的执行。QEMU编译出来的结果分为系统模式和用户模式,QEMU用户模式编译出来的可执行文件名为:qemu-user。关于QEMU更多的介绍请浏览官方网站——QEMU。
4649 0
|
数据可视化 机器人
ROS(6):ROS安装rviz模拟器
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/48379697 未经博主允许不得转载。 博主地址是:http://blog.csdn.net/freewebsys 1,关于rviz模拟器 rviz是ROS中一款强大的3D可视化工具。 网站:http://wiki.ros.org/rviz 2,安装
3613 0
|
15天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8208 18
|
14天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
2456 13
|
14天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1860 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!

热门文章

最新文章