欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Quarkus中實現(xiàn)Resteasy的文件上傳下載操作

 更新時間:2022年02月23日 11:00:17   作者:kl  
這篇文章主要為大家介紹了Quarkus中實現(xiàn)Resteasy的文件上傳下載的操作過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

前言

做java web開發(fā),文件的上傳和下載是一個非常常見的需求場景。在spring生態(tài)下的文件上傳下載非常簡單,記得五年前,我剛寫博的時候也寫過spring的上傳和下載《SpringMvc實現(xiàn)文件上傳與下載》,以及Struts2的文件上傳和下載《java Struts2實現(xiàn)文件上傳下載》。今天來看看Quarkus框架中是如何實現(xiàn)的,因為Quarkus的JAX-RS采用Resteasy的實現(xiàn),故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表單數(shù)據(jù)的實體類,如下:

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參數(shù)里獲取文件名,如:

@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("上傳文件內(nèi)容:{}", IOUtils.toString(i, StandardCharsets.UTF_8));
        return Response.ok("ok").build();
    }

InputPart實體承載了文件流,以及請求體信息,可以通過getBody來獲取文件流,Header中的Content-Disposition參數(shù)獲取真實的文件名稱。除了這種方式獲取真實文件名稱,如代碼所示,還可以通過表單參數(shù),接收前端表單傳過來的文件名稱。

文件下載

@GET
    @Path("/download")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response download(@QueryParam("fileName") String fileName) {
        String filePath = "E:\\工作相關(guān)\\" + fileName;
        File file = FileUtils.getFile(filePath);
        //對輸出的文件名進(jìn)行編碼,防止下載的中文文件名亂碼
        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中實現(xiàn)Resteasy的文件上傳下載操作的詳細(xì)內(nèi)容,更多關(guān)于Quarkus中Resteasy文件上傳下載的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 踩坑之spring事務(wù),非事務(wù)方法與事務(wù)方法執(zhí)行相互調(diào)用方式

    踩坑之spring事務(wù),非事務(wù)方法與事務(wù)方法執(zhí)行相互調(diào)用方式

    這篇文章主要介紹了踩坑之spring事務(wù),非事務(wù)方法與事務(wù)方法執(zhí)行相互調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java基于享元模式實現(xiàn)五子棋游戲功能實例詳解

    Java基于享元模式實現(xiàn)五子棋游戲功能實例詳解

    這篇文章主要介紹了Java基于享元模式實現(xiàn)五子棋游戲功能,較為詳細(xì)的分析了享元模式的概念、功能并結(jié)合實例形式詳細(xì)分析了Java使用享元模式實現(xiàn)五子棋游戲的具體操作步驟與相關(guān)注意事項,需要的朋友可以參考下
    2018-05-05
  • Java實例講解Comparator的使用

    Java實例講解Comparator的使用

    我們先介紹一下comparator,我們后文稱為比較器。比較器實際上是一個實現(xiàn)了comparator interface是一個實例,在Arrays.sort方法我們可以提供這樣一個實例,即使被排序的object沒有實現(xiàn)comparable接口,我們也可以排序了
    2022-11-11
  • 詳解SpringBoot如何實現(xiàn)多環(huán)境配置

    詳解SpringBoot如何實現(xiàn)多環(huán)境配置

    在實際的軟件開發(fā)過程中,一個應(yīng)用程序通常會有多個環(huán)境,pring?Boot?提供了一個非常靈活和強大的方式來管理這些環(huán)境配置,下面就跟隨小編一起學(xué)習(xí)一下吧
    2023-07-07
  • Java公平鎖與非公平鎖的核心原理講解

    Java公平鎖與非公平鎖的核心原理講解

    從公平的角度來說,Java 中的鎖總共可分為兩類:公平鎖和非公平鎖。但公平鎖和非公平鎖有哪些區(qū)別?核心原理是什么?本文就來和大家詳細(xì)聊聊
    2022-11-11
  • eclipse maven 插件的安裝和配置詳解

    eclipse maven 插件的安裝和配置詳解

    這篇文章主要介紹了eclipse maven 插件的安裝和配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Springboot實現(xiàn)VNC的反向代理功能

    Springboot實現(xiàn)VNC的反向代理功能

    這篇文章主要介紹了Springboot實現(xiàn)VNC的反向代理,搭建過程也很簡單,通過注冊bean攔截指定URL路徑進(jìn)行自定義操作,具體實例代碼跟隨小編一起看看需要的朋友可以參考下
    2021-09-09
  • 如何在Spring Boot啟動時運行定制的代碼

    如何在Spring Boot啟動時運行定制的代碼

    在本文中您將學(xué)習(xí)如何掛鉤應(yīng)用程序引導(dǎo)程序生命周期并在Spring Boot啟動時執(zhí)行代碼。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Java抽象類和接口使用梳理

    Java抽象類和接口使用梳理

    對于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一,在?Java?中可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關(guān)于Java入門基礎(chǔ)之抽象類與接口的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 關(guān)于Java父類沒有無參構(gòu)造方法子類處理方法

    關(guān)于Java父類沒有無參構(gòu)造方法子類處理方法

    父類無參構(gòu)造方法,子類不寫,其實會默認(rèn)調(diào)用父類的無參構(gòu)造方法也就是用super(),編譯運行后,會打印出"子類會調(diào)用Father的第一個構(gòu)造方法,這篇文章給大家介紹關(guān)于Java父類沒有無參構(gòu)造方法子類處理方法,感興趣的朋友一起看看吧
    2024-01-01

最新評論