參考:
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較為簡單。
(這種方式需要創建臨時文件)