使用RestTemplate調用接口上傳文件


參考:

https://www.cnblogs.com/theRhyme/p/10110416.html (這種方式需要創建臨時文件)

https://blog.csdn.net/weixin_42615290/article/details/119558150 (這種方式不需要臨時文件。但是包裝太多,包裝了兩個HttpEntity和兩個HttpHeaders)

https://www.jianshu.com/p/a326a2ffafde(提供了兩種方式,方式1需要創建臨時文件,方式2不需要創建臨時文件)

https://blog.csdn.net/kahhy/article/details/78115698 (這種方式需要創建臨時文件)

https://www.jianshu.com/p/e4cc1e293c8f (入參不是MultipartFile而是File類型,如果是MultipartFile需要轉換為File類型)

 

上面有的博客需要創建本地臨時文件,有的不需要。

其實不需要創建臨時文件也可上傳:

 方式1:

@PostMapping("/importEquipmentAccounts")
    @ApiOperation(value = "設備台賬導入", notes = "liuyachao")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Token", value = "token",  required = true, paramType = "header", dataType = "string"),
            @ApiImplicitParam(name = "file", value = "需要導入的excel文件", required = true, paramType = "form", dataType = "file")
    })
    public ResponseObjectResult importEquipmentAccounts(@RequestPart(value = "file") MultipartFile file,
                                                        HttpServletResponse resp) {
        File tempFile = null;
        try {
            //設置請求頭
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
            HttpHeaders fileHeader= new HttpHeaders();
            fileHeader.setContentType(MediaType.parseMediaType(file.getContentType()));
            fileHeader.setContentDispositionFormData("file", file.getOriginalFilename());
            //設置請求體,注意是LinkedMultiValueMap
            HttpEntity fileEntity = new HttpEntity<>(new ByteArrayResource(file.getBytes()),fileHeader);
            MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
            form.add("file", fileEntity);
            //用HttpEntity封裝整個請求報文
            HttpEntity files = new HttpEntity<>(form, headers);
            ResponseEntity<ResponseObjectResult> entity = restTemplate.postForEntity(hosBaseUrl + WebConfig.IMPORT_EQUIPMENT_ACCOUNTS, files, ResponseObjectResult.class);
            ResponseObjectResult responseObjectResult = entity.getBody();
            return responseObjectResult;
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseObjectResult(new ResponseStatus(ResultCode.FAIL));
        }
    }

方式2:

@PostMapping("/importEquipmentAccounts")
    @ApiOperation(value = "設備台賬導入", notes = "liuyachao")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Token", value = "token",  required = true, paramType = "header", dataType = "string"),
            @ApiImplicitParam(name = "file", value = "需要導入的excel文件", required = true, paramType = "form", dataType = "file")
    })
    public ResponseObjectResult importEquipmentAccounts(@RequestPart(value = "file") MultipartFile file,
                                                        HttpServletResponse resp) {
        File tempFile = null;
        try {
            //設置請求頭
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
            MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
            form.add("file", file.getResource());
            //用HttpEntity封裝整個請求報文
            HttpEntity files = new HttpEntity<>(form, headers);
            ResponseEntity<ResponseObjectResult> entity = restTemplate.postForEntity(hosBaseUrl + WebConfig.IMPORT_EQUIPMENT_ACCOUNTS, files, ResponseObjectResult.class);
            ResponseObjectResult responseObjectResult = entity.getBody();
            return responseObjectResult;
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseObjectResult(new ResponseStatus(ResultCode.FAIL));
        }
    }

方式2較為簡單。

 

 

 

 

(這種方式需要創建臨時文件)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM