RestTemplate send file

本文介绍如何使用Spring Boot和RestTemplate实现文件的POST上传操作。通过设置HTTP头信息,包括Content-Type为multipart/form-data和Authorization携带Bearer Token,创建并发送带有文件参数的HttpEntity请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpHeaders headers = new HttpHeaders ();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.add("Authorization","Bear token");

LinkedMutiValueMap<Stirng,Object> params = new LinkedMutiValueMap<>();
//add file
File file = new File("d:\xx.xls");
FileSystemResource fss = new FileSystemResource(file);

params.add("att1",fss);

HttpEntity<?> request = new HttpEntity<>(params,headers);

ResponseEntity<String> response = restTemplate.exchange(uri,HttpMethod.POST,request,String.class);



@RequestMapping(value="/test")
@ResponseBody
public ResponseEntity remoteUpdteTest(String test,@RequestParam MultipartFile att1){
    
    return ResponseEntity.ok("ok");
}

 

@PostMapping("/uploadPmPhoto") @ApiOperation("拍照上传图片进行识别") @AutoLog(appName = ApiConst.TRACK_IN,moduleName = "uploadPhoto") public R<ImageReturnDto> uploadPmPhoto(HttpServletRequest request) { log.info("上传图片进行识别:" + CurrentUser.getUser().getWorkNo()); ImageReturnDto imageReturnDto = new ImageReturnDto(); MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request; MultiValueMap<String, MultipartFile> fileMap = multipartHttpServletRequest.getMultiFileMap(); MultipartFile file = fileMap.getFirst("file"); try { if(ocrUrl2Flag){ String originalFilename = file.getOriginalFilename(); // 生成临时文件 String tempPath = System.getProperty("java.io.tmpdir"); File tempFile = new File(tempPath + originalFilename); InputStream inputStream = null; if (!tempFile.exists()) { inputStream = file.getInputStream(); Files.copy(inputStream, tempFile.toPath()); } FileSystemResource resource = new FileSystemResource(tempFile); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); headers.set("Accept-Charset", "UTF-8"); MultiValueMap<String,Object> body = new LinkedMultiValueMap<>(); body.add("file",resource); HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(body, headers); ResponseEntity<String> responseEntity = restTemplate.exchange(ocrUrl2, HttpMethod.POST, httpEntity, new ParameterizedTypeReference<String>() { }); Files.delete(tempFile.toPath()); if(responseEntity.getStatusCodeValue() == 200){ JSONObject jsonObject = JSONObject.parseObject(responseEntity.getBody()); imageReturnDto.setOCRText(jsonObject.getString("processedOCRTexts")); imageReturnDto.setImageData(jsonObject.getString("imageData")); log.info("OCR识别结果:{}",jsonObject.getString("processedOCRTexts")); return R.success(imageReturnDto); }else{ log.error("OCR识别服务异常:{}", responseEntity); return R.fail("OCR识别服务异常"); } }else{ String imageOcrDto = multipartHttpServletRequest.getParameter("imageOcrDto"); ImageOcrDto imageOcrDtoNew = new ImageOcrDto(); String base64String = null; byte[] fileBytes = file.getBytes(); base64String = Base64.getEncoder().encodeToString(fileBytes); ImageOcrFileDto imageOcrFileDto = new ImageOcrFileDto(); imageOcrFileDto.setFileName("1.jpg"); imageOcrFileDto.setImageData(base64String); List<ImageOcrFileDto> imageOcrFileDtoList = new ArrayList<>(); imageOcrFileDtoList.add(imageOcrFileDto); imageOcrDtoNew = JSONObject.parseObject(imageOcrDto, ImageOcrDto.class); imageOcrDtoNew.setFiles(imageOcrFileDtoList); ImageOcrDto imageOcr = new ImageOcrDto(); BeanUtils.copyProperties(imageOcrDtoNew,imageOcr); String imageOcrNew = JSONObject.toJSONString(imageOcr); String sendPostJson = HttpRequestUtil.sendPost(ocrUrl,imageOcrNew); log.info("OCR识别结果:{}",sendPostJson); JSONObject jsonObject = JSONObject.parseObject(sendPostJson); JSONArray jsonObjectArray = jsonObject.getJSONArray("1.jpg"); if(!StringUtils.isEmpty(jsonObjectArray)){ StringBuilder stringBuilder = new StringBuilder(); for (int i=0;i<jsonObjectArray.size();i++) { JSONObject recipe = JSONObject.parseObject(jsonObjectArray.get(i).toString()); ImageOcrVO imageOcrVO = JSONObject.parseObject(String.valueOf(recipe), ImageOcrVO.class); if(org.apache.commons.lang.StringUtils.isNotBlank(imageOcrVO.getOCRText())){ stringBuilder.append(imageOcrVO.getOCRText()); } } imageReturnDto.setOCRText(stringBuilder.toString()); imageReturnDto.setImageData(base64String); return R.success(imageReturnDto); } else { R.fail("图片解析失败"); } } } catch (Exception e){ ErrorLogUtils.saveError(e); log.error("图片识别异常:{}",e.toString()); } return R.success(imageReturnDto); } 如何用postman测试如上方法
最新发布
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值