前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
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;
?