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

网友投稿 334 2022-08-26


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/

文件上传

首先引入依赖

org.jboss.resteasy

resteasy-multipart-provider

这个依赖主要用于支持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-DispHyZEHEwosition参数获取真实的文件名称。除了这种方式获取真实文件名称,如代码所示,还可以通过表单参数,接收前端表单传过来的文件名称。

文件下载

@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.encodhttp://e(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文件上传下载的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:flask学习(一):环境的安装(flask开发环境)
下一篇:解决: PyInstaller打包后exe文件打开时出现failed to execute script(解决方案工程师)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~