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;