Quarkus中实现Resteasy的文件上传下载操作

 更新时间:2022年02月23日 11:00:17   作者:kl  
这篇文章主要为大家介绍了Quarkus中实现Resteasy的文件上传下载的操作过程步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

前言

做java web开发,文件的上传和下载是一个非常常见的需求场景。在spring生态下的文件上传下载非常简单,记得五年前,我刚写博的时候也写过spring的上传和下载《SpringMvc实现文件上传与下载》,以及Struts2的文件上传和下载《java Struts2实现文件上传下载》。今天来看看Quarkus框架中是如何实现的,因为Quarkus的JAX-RS采用Resteasy的实现,故Quarkus中的文件上传和下载,也就是Resteasy框架的上传和下载了。

Resteasy文档:https://docs.jboss.org/resteasy/docs/4.3.1.Final/

文件上传

首先引入依赖

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-multipart-provider</artifactId>
</dependency>

这个依赖主要用于支持multipart/form-data的请求,接下来需要定义一个接收multipart/form-data表单数据的实体类,如下:

public class UploadEntity{
        @FormParam("file")
        private InputPart file;
        @FormParam("fileName")
        private String fileName;
        public InputPart getFile() {
            return file;
        }
        public void setFile(InputPart file) {
            this.file = file;
        }
        public String getFileName() {
            return fileName;
        }
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
    }

以上代码用来映射表单中的属性值,除了文件流,只支持字符串类型的属性。其中file字段用来接收上传的文件,除了可以用InputPart类型来接收,上传文件还可以使用InputStream、byte[]、File等接收,这里使用InputPart来接收是为了方便接下来从Header参数里获取文件名,如:

@POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response upload(@MultipartForm UploadEntity uploadEntity) throws IOException {
        InputStream i = uploadEntity.getFile().getBody(InputStream.class, null);
        String[] contentDisposition = uploadEntity.getFile().getHeaders().getFirst("Content-Disposition").split(";");
        String fileName = "";
        for (String filename : contentDisposition) {
            if ((filename.trim().startsWith("filename"))) {
                String[] name = filename.split("=");
                fileName = name[1].trim().replaceAll("\"", "");
            }
        }
        logger.info("上传文件名:{}", fileName);
        logger.info("表单提交的文件名:{}", uploadEntity.getFileName());
        logger.info("上传文件内容:{}", IOUtils.toString(i, StandardCharsets.UTF_8));
        return Response.ok("ok").build();
    }

InputPart实体承载了文件流,以及请求体信息,可以通过getBody来获取文件流,Header中的Content-Disposition参数获取真实的文件名称。除了这种方式获取真实文件名称,如代码所示,还可以通过表单参数,接收前端表单传过来的文件名称。

文件下载

@GET
    @Path("/download")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response download(@QueryParam("fileName") String fileName) {
        String filePath = "E:\\工作相关\\" + fileName;
        File file = FileUtils.getFile(filePath);
        //对输出的文件名进行编码,防止下载的中文文件名乱码
        String encodFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
        return Response.ok(file)
                .header("content-disposition", "attachment; filename=\"" + encodFileName + "\"")
                .header("Content-Length", file.length())
                .build();
    }

相比于文件上传,文件下载的代码就更简单了,不过要注意,如果下载的文件名是中文的,最好将文件名使用URLEncoder的UTF-8编码下,防止中文名称乱码。

以上就是Quarkus中实现Resteasy的文件上传下载操作的详细内容,更多关于Quarkus中Resteasy文件上传下载的资料请关注脚本之家其它相关文章!

相关文章

  • jvm支持最大线程数简单测试

    jvm支持最大线程数简单测试

    这篇文章主要介绍了jvm支持最大线程数简单测试,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Intellij IDEA解析jacoco结果文件的方法

    Intellij IDEA解析jacoco结果文件的方法

    这篇文章主要介绍了Intellij IDEA解析jacoco结果文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot读取多环境配置文件的几种方式

    SpringBoot读取多环境配置文件的几种方式

    这篇文章主要给大家介绍了SpringBoot读取多环境配置文件的几种方式,文章通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • Java 入门图形用户界面设计之事件处理上

    Java 入门图形用户界面设计之事件处理上

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的事件处理
    2022-02-02
  • 深入理解springboot中配置文件application.properties

    深入理解springboot中配置文件application.properties

    本文主要介绍了springboot中配置文件application.properties,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • idea快速搭建springboot项目的操作方法

    idea快速搭建springboot项目的操作方法

    下面小编就为大家分享一篇idea快速搭建springboot项目的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 解决Maven项目pom.xml导入了Junit包还是用不了@Test注解问题

    解决Maven项目pom.xml导入了Junit包还是用不了@Test注解问题

    在Maven项目中,如果在非test目录下使用@Test注解,可能会因为pom.xml中<scope>test</scope>的设置而无法使用,正确做法是将测试代码放在src/test/java目录下,或去除<scope>test</scope>限制,这样可以确保Junit依赖正确加载并应用于适当的代码部分
    2024-10-10
  • java实现事件委托模式的实例详解

    java实现事件委托模式的实例详解

    这篇文章主要介绍了java实现事件委托模式的实例详解的相关资料,这里提供实例来说明如何实现改功能,希望能帮助到大家理解这样的模式,需要的朋友可以参考下
    2017-08-08
  • Spring中IOC和AOP的深入讲解

    Spring中IOC和AOP的深入讲解

    这篇文章主要给大家介绍了关于Spring中IOC和AOP的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Java实现基本排序算法的示例代码

    Java实现基本排序算法的示例代码

    排序就是将一串记录按照其中某个或某些关键字的大小,递增或递减的排列起来的操作。本文将用Java实现一些基本的排序算法,感兴趣的可以了解一下
    2022-07-07

最新评论