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;