前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
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);
上传接口实现
@Overridepublic 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);
下载接口实现
@Overridepublic 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;