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

  • 2019 年 10 月 7 日
  • 筆記

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

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

Maven依赖

    <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>

注解

@MultipartForm  -- 将http请求转化为类的对象  @Consumes("multipart/form-data") -- 只接收MIME TYPE为multipart/form-data的请求

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

	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);

上传接口实现

   @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接口方法

	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);

下载接口实现

   @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、 上传、下载请求参数对象

  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;             }     }

及:

  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”发送请求。

———————————————————-

补记:

实体类使用的注解为:

@FormParam("number")  private String number;