restTemplate上传文件

在项目中遇到一个需求:客户端请求中间转发服务器,然后由中间转发服务器,转发请求到具体项目中处理

在客户端上传文件的时候,具体项目接收不到请求,后来查了下具体原因,是中间件服务器没有把图片数据传送到具体项目中

解决办法,在中间件服务器中解析请求,再使用restTemplate转发请求

具体项目解析文件和数据的代码

@RequestMapping(value = "doConfirmProduction", method = { RequestMethod.POST, RequestMethod.GET })
	@ResponseBody
	public ReturnMsgBean doConfirmProduction(HttpServletRequest request){
		ReturnMsgBean rmb = new ReturnMsgBean();
		try {
			String data = request.getParameter("data");
			MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
			List<MultipartFile> confirmPictureList = multipartHttpServletRequest.getFiles("confirmPictureFiles");
			List<MultipartFile> defectPictureList = multipartHttpServletRequest.getFiles("defectPictureFiles");
			//处理逻辑略……
		} catch (Exception e) {
			LOGGER.error("报工失败",e);
			rmb.setReturnCode(ReturnMsgBean.CODE_PA);
			rmb.setStatus(ReturnMsgBean.ERROR);
			rmb.setReturnMsg(ReturnMsgBean.EXCEPTION);
		}
		return rmb;
	}

中间服务器转发请求

@RequestMapping(value = "doConfirmProduction", method = { RequestMethod.POST, RequestMethod.GET })
	public ReturnMsgBean doConfirmProduction(HttpServletRequest request){
		ReturnMsgBean rmb = new ReturnMsgBean();
		//创建临时文件夹,存放客户端发送过来的文件
		String parentPath = "d:/usr/temp/file/";
		File parentFile = new File(parentPath);
		try {
			if (!parentFile.exists()) {
				parentFile.mkdirs();
			}

			MultiValueMap<String,Object> postParameters=new LinkedMultiValueMap<String,Object>();
			String data = request.getParameter("data");
			postParameters.add("data",data);
			if(request instanceof MultipartHttpServletRequest){
				MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
				List<MultipartFile> confirmPictureList = multipartHttpServletRequest.getFiles("confirmPictureFiles");
				List<MultipartFile> defectPictureList = multipartHttpServletRequest.getFiles("defectPictureFiles");
				addToMultiValueMap(postParameters,confirmPictureList,"confirmPictureFiles",parentPath);
				addToMultiValueMap(postParameters,defectPictureList,"defectPictureFiles",parentPath);
			}
			//使用MultiValueMap<String,Object>上传文件和参数
			rmb=restTemplate.postForObject(Constant.MES_PRODUCTIONORDERCONFIRM_DOCONFIRMPRODUCTION,postParameters,ReturnMsgBean.class);
			//删除临时文件夹
			parentFile.delete();
		} catch (Exception e) {
			rmb.setReturnCode(ReturnMsgBean.CODE_PA);
			rmb.setStatus(ReturnMsgBean.ERROR);
			rmb.setReturnMsg(ReturnMsgBean.EXCEPTION);
		}
		return rmb;
	}

解析客户端发来的文件

private void addToMultiValueMap(MultiValueMap<String,Object> param,List<MultipartFile> files,String key,String parentPath) throws IOException {
		List<FileSystemResource> tmpResource = new ArrayList<>();
		for (MultipartFile file : files) {
			String filePath = parentPath + file.getOriginalFilename();
			File tmpFile = new File(filePath);
			//将MultipartFile对象持久化到临时文件夹中
			file.transferTo(tmpFile);
			FileSystemResource fileSystemResource = new FileSystemResource(tmpFile);
			tmpResource.add(fileSystemResource);
		}
		param.addAll(key,tmpResource);
	}
这样具体项目就可以正常处理请求

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值