前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo + RestEasy 实现文件上传与下载

Dubbo + RestEasy 实现文件上传与下载

作者头像
微风-- 轻许--
发布2019-09-25 16:36:33
1.8K0
发布2019-09-25 16:36:33
举报
文章被收录于专栏:java 微风java 微风

原文链接:https://blog.csdn.net/weixin_43057263/article/details/83187030

Dubbo+RestEasy实现文件上传与下载 Dubbo+RestEasy实现文件上传与下载 Maven依赖 注解 代码实现 1、 上传 2、 下载 3、 上传、下载请求参数对象 测试 Dubbo+RestEasy实现文件上传与下载 通过JBOSS WILDLFY服务器,利用jboss resteasy实现文件流方式的上传与下载,方便、简洁。

Maven依赖

代码语言:javascript
复制
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxrs</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jackson-provider</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxb-provider</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-multipart-provider</artifactId>
      <version>3.0.9.Final</version>
    </dependency>

注解

代码语言:javascript
复制
@MultipartForm  -- 将http请求转化为类的对象
@Consumes("multipart/form-data") -- 只接收MIME TYPE为multipart/form-data的请求

代码实现 1、 上传 上传Rest接口方法

代码语言:javascript
复制
	import javax.ws.rs.Consumes;
	import javax.ws.rs.POST;
	import javax.ws.rs.Path;
	import javax.ws.rs.Produces;
	import javax.ws.rs.core.MediaType;	
	import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
	import com.sf.framework.domain.Result;
	...
	@POST
	@Path("upload")
	@Consumes(MediaType.MULTIPART_FORM_DATA)
	Result<String> uploadData(@MultipartForm UploadFileParaRequest request);

上传接口实现

代码语言:javascript
复制
   @Override
   public Result<String> uploadData(UploadFileParaRequest request) {
   	Result<String> result = new Result<>(true);
   	try {
   		// 文件存储路径
   		String fileSavePath = "e://demo/";
   		// 存储文件
   		saveFile(request.getFileData(), fileSavePath);
   		// 返回数据
   		result.setObj(fileSavePath );
   	}  catch (Exception e) {
   		result.setSuccess(false);
   		result.setErrorCode(ErrorCode.SYSTEM_EXCEPTION);
   		result.setErrorMessage("系统异常");
   	}

   	return result;
   }

2、 下载 下载Rest接口方法

代码语言:javascript
复制
	import javax.ws.rs.Consumes;
	import javax.ws.rs.POST;
	import javax.ws.rs.Path;
	import javax.ws.rs.core.MediaType;
	import javax.ws.rs.core.Response;
	import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
	
	@POST
	@Path("download")
	@Consumes(MediaType.MULTIPART_FORM_DATA)
	@Produces("application/zip")
	Response downloadData(@MultipartForm DownloadRequest request);

下载接口实现

代码语言:javascript
复制
   @Override
   public Response downloadData(DownloadRequest request) {
   	ResponseBuilder response = Response.status(Status.OK);
   	try {
   		// 校验请求参数
   		if (request == null || StringUtils.isEmpty(request.getFilePath())) {
   			throw new BusinessException("文件路径为空", ErrorCode.NULL_DOWNLOAD_REQUEST_PARAM);
   		}

   		File file = new File(request.getFilePath());
   		response = Response.ok((Object) file);
   	} catch (Exception e) {
   		response.status(Status.BAD_REQUEST);
   	}

   	return response.build();
   }

3、 上传、下载请求参数对象

代码语言:javascript
复制
  import java.io.Serializable;
   import java.util.Arrays;
   import javax.ws.rs.FormParam;
   import org.jboss.resteasy.annotations.providers.multipart.PartType;
   
   public class UploadFileParaRequest implements Serializable {
           private static final long serialVersionUID = 1L;
           
           // 文件内容
           @FormParam("fileData")
           private byte[] fileData;
       
           public byte[] getFileData() {
               return fileData;
           }
       
           @FormParam("file")
           @PartType("application/octet-stream")
           public void setFileData(byte[] fileData) {
               this.fileData = fileData; 
           }
   }

及:

代码语言:javascript
复制
  import java.io.Serializable;
   import javax.ws.rs.FormParam;
   
   public class DownloadRequest implements Serializable {
           private static final long serialVersionUID = 1L;
       
           // 文件路径
           @FormParam("filePath")
           private String filePath;
       
           public String getFilePath() {
               return filePath;
           }
       
           public void setFilePath(String filePath) {
               this.filePath = filePath;
           }
   }

测试 使用postman测试,设置body为“form-data”,选择待上传文件(zip)即可;下载接口选择“download”发送请求。

----------------------------------------------------------

补记:

实体类使用的注解为:

代码语言:javascript
复制
@FormParam("number")
private String number;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年09月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档