Sring项目间的文件传输(楼主亲测有效)

Spring项目间的文件传输

在做服务端的开发过程中,经常需要进行服务间的文件传输。
相关的框架包括:Springboot、Spring MVC等。
相关的技术包括:RestTemplate、FileSystemResource、MultipartFile等。

  1. 项目间文件传输
    项目B传输文件到项目A。
    例如项目A:有一个接口,接收的文件参数类型MultipartFile,如下图。
@PostMapping("uploadReport")
    public JsonResult uploadReport(@Valid String number, @Valid MultipartFile multipartFile) {
        log.debug("REST request to uploadReport. number: {}", number);
        OperationResult result = reportManageService.uploadReport(number, multipartFile);
        if (result.getSucc()) {
            return success(result.getEntity());
        }
        return error(result.getCode(), result.getMessage());
    }
  1. 在项目B中,发送的请求的代码如下图所示。
public OperationResult uploadReport() throws IOException {
        //处理请求头
        HttpHeaders requstHttpHeaders = new HttpHeaders();
        //处理请求路径
        StringBuilder remoteUrl = new StringBuilder();
        remoteUrl.append("http://172.16.xx.xx:8080/").append("api/xxx/uploadReport");

        //如果你知道文件位于你机器上的位置
        File filepath = new File("/Users/wangdong/Desktop/buzaihu.jpg");
        FileSystemResource fileSystemResource = new FileSystemResource(filepath);
        //这里需要封装一个对象包括号码和FileSystemResource
        MultiValueMap params = new LinkedMultiValueMap<>();
        params.add("number",87000016);
        params.add("multipartFile",fileSystemResource);
        //这里要封装一个对象,然后HttpEntity<对象>
        HttpEntity> httpEntity = new HttpEntity<>(params, requstHttpHeaders);
        //在直接接受返回值对象的时候RemoteUser实体类对象要和对端的实体类对象一一对应(对端需要直接返回实体类)
        ResponseEntity result = restTemplate.postForEntity(remoteUrl.toString(), httpEntity, String.class);
        //下面的返回判断,根据你的需要可以debug 对result的返回做正确的校验
        if (!String.valueOf(result.getStatusCodeValue()).equals(SystemCode.SUCCESS.getCode())) {
            return new OperationResult<>(SelfErrorCode.REMOTE_REQUEST_ERROR.getCode(), selfSystemErrorCode.getRemoteRequestError());
        }
        if (null == result.getBody()) {
            return new OperationResult<>(SelfErrorCode.REMOTE_RETURN_NULL.getCode(), selfSystemErrorCode.getRemoteReturnNull());
        }
        return new OperationResult<>(true);
}

以上代码楼主亲测有效,你仅需进行少量的改动即可使用。
祝你工作顺利。

你可能感兴趣的:(Sring项目间的文件传输(楼主亲测有效))