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;