最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

這個(gè)依賴主要用于支持multipart/form-data的請(qǐng)求,接下來需要定義一個(gè)接收multipart/form-data表單數(shù)據(jù)的實(shí)體類,如下:

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實(shí)體承載了文件流,以及請(qǐng)求體信息,可以通過getBody來獲取文件流,Header中的Content-Disposition參數(shù)獲取真實(shí)的文件名稱。除了這種方式獲取真實(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);
        //對(duì)輸出的文件名進(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中實(shí)現(xiàn)Resteasy的文件上傳下載操作的詳細(xì)內(nèi)容,更多關(guān)于Quarkus中Resteasy文件上傳下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring?Boot自定義Starter組件開發(fā)實(shí)現(xiàn)配置過程

    Spring?Boot自定義Starter組件開發(fā)實(shí)現(xiàn)配置過程

    SpringBoot中的starter是一種非常重要的機(jī)制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)?starter,應(yīng)用者只需要在maven中引入starter依賴,這篇文章主要介紹了Spring?Boot自定義Starter組件開發(fā)實(shí)現(xiàn),需要的朋友可以參考下
    2022-06-06
  • Java中Process類的使用與注意事項(xiàng)說明

    Java中Process類的使用與注意事項(xiàng)說明

    這篇文章主要介紹了Java中Process類的使用與注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springBoot配置國產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫的示例詳解

    springBoot配置國產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫的示例詳解

    本文向大家介紹springBoot?配置國產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫的相關(guān)知識(shí),文章結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 詳解SpringBoot如何自定義注解

    詳解SpringBoot如何自定義注解

    注解,也叫元數(shù)據(jù),一種代碼級(jí)別的說明,它是JDK1.5及以后版本引入的一個(gè)特性,與類、接口、枚舉是在同一個(gè)層次,本文給大家詳細(xì)介紹了SpringBoot如何自定義注解,文中通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • SpringBoot實(shí)現(xiàn)第一次啟動(dòng)時(shí)自動(dòng)初始化數(shù)據(jù)庫的方法

    SpringBoot實(shí)現(xiàn)第一次啟動(dòng)時(shí)自動(dòng)初始化數(shù)據(jù)庫的方法

    本文主要介紹了SpringBoot實(shí)現(xiàn)第一次啟動(dòng)時(shí)自動(dòng)初始化數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • springboot 重定向方式(redirect前綴)

    springboot 重定向方式(redirect前綴)

    這篇文章主要介紹了springboot 重定向方式(redirect前綴),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java如何使用Query動(dòng)態(tài)拼接SQL詳解

    Java如何使用Query動(dòng)態(tài)拼接SQL詳解

    這篇文章主要給大家介紹了關(guān)于Java如何使用Query動(dòng)態(tài)拼接SQL的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • SpringBoot自定義配置項(xiàng)過程

    SpringBoot自定義配置項(xiàng)過程

    在SpringBoot項(xiàng)目中,通過在application.properties文件中添加配置項(xiàng),然后使用@ConfigurationProperties注解將這些配置項(xiàng)與實(shí)體Bean進(jìn)行綁定,可以實(shí)現(xiàn)配置項(xiàng)與實(shí)體類字段的自動(dòng)關(guān)聯(lián),進(jìn)而方便地讀取配置文件中的數(shù)據(jù),這種方法不僅簡化了配置管理
    2024-11-11
  • SpringCloud使用Zookeeper作為配置中心的示例

    SpringCloud使用Zookeeper作為配置中心的示例

    這篇文章主要介紹了SpringCloud使用Zookeeper作為配置中心的示例,幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下
    2021-04-04
  • java高并發(fā)ScheduledThreadPoolExecutor與Timer區(qū)別

    java高并發(fā)ScheduledThreadPoolExecutor與Timer區(qū)別

    這篇文章主要為大家介紹了java高并發(fā)ScheduledThreadPoolExecutor與Timer區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

石狮市| 肥西县| 鲁山县| 历史| 芦溪县| 兴仁县| 武功县| 墨玉县| 兰西县| 长宁区| 宁蒗| 西畴县| 鲁甸县| 新郑市| 盘山县| 泽库县| 丽江市| 泸西县| 莱阳市| 阿坝| 汝南县| 肇源县| 阳西县| 印江| 龙游县| 冷水江市| 漯河市| 浦北县| 平泉县| 双城市| 香河县| 庆云县| 汕尾市| 布拖县| 昌都县| 渝北区| 白水县| 蓝田县| 隆安县| 桐柏县| 醴陵市|