原文链接: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;