報錯內容如上,其他內容如:Type definition error: [simple type, class java.io.FileDescriptor]
1、controller代碼
@RestController @Api(value = "OSS文件服務接口") @RequestMapping("/manage/oss/") public class OssFileController { private final OssFileService ossFileService; @PostMapping("file/upload") @ApiOperation(value = "文件上傳", httpMethod = "POST") public Response<?> uploadFile(MultipartFile file) { return ossFileService.uploadFile(file); } }
2、service編碼
public Response<?> uploadFile(MultipartFile file) { //...其他代碼 try { File f = File.createTempFile("spw-", file.getOriginalFilename()); file.transferTo(f); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); MultiValueMap formDataMap = new LinkedMultiValueMap(); FileSystemResource fs = new FileSystemResource(f);//重點 這個才是restTemplate能傳遞的實體 formDataMap.put(k, Collections.singletonList(fs)); HttpEntity<String> entity = new HttpEntity(formDataMap, headers); restTemplate.postForObject("url", entity, Response.class); f.deleteOnExit(); return ossUploadPubResDTO == null ? Response.createError("上傳文件失敗") : Response.createSuccess(ossUploadPubResDTO); } catch (IOException e) { log.error("上傳文件失敗", e); return Response.createError("上傳文件失敗"); } }
3、結論
restTemplate不能發送form表單參數時,MultipartFile和file都不能正確識別,需包裝為FileSystemResource才可
可創建臨時文件