报错内容如上,其他内容如: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才可
可创建临时文件