<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
做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檔案上傳下載的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45