修改HttpServletRequest的中的参数值


利用SpringMVC上传文件,方法A

        @RequestMapping(value = "/saveJobInfoFromFile", method = {RequestMethod.POST})
	@ResponseBody
	public ReturnInfo saveJobInfoFromFile(HttpServletRequest request,HttpServletResponse response);
中,我将要循环调用下面的方法B:

	@RequestMapping(value = "/saveJobInfo", method = {RequestMethod.POST})
	@ResponseBody
	public ReturnInfo saveJobInfo(HttpServletRequest request,HttpServletResponse response, String jobJson);


由于方法A中的request需要获取上传的文件,但是这个文件又不能传递给方法B(会有干扰),所以我需要对request的参数进行修改。代码如下:

 // 创建一个通用的多部分解析器
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(servletContext);
            // 判断 request 是否有文件上传,即多部分请求
            if (multipartResolver.isMultipart(request)) {
                // 转换成多部分request
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                // 取得request中的所有文件名
                Iterator<String> iter = multiRequest.getFileNames();
                while (iter.hasNext()) {
                    // 取得上传文件
                    MultipartFile file = multiRequest.getFile(iter.next());
                    if (file != null) {
                        FileUtils.copyInputStreamToFile(file.getInputStream(),
                        		outFile);
                    }
                }
                for(Entry<String, List<MultipartFile>> temp:multiRequest.getMultiFileMap().entrySet()){
                	for(int i = 0;i<temp.getValue().size();i++){
                		temp.getValue().set(i, null);//clear()估计也可以,删除文件,另外getKey()获得的String是前端上传的name
                	}
                }
            }

这里有个很奇怪的地方:

MultiValueMap<String, MultipartFile> getMultiFileMap();
返回值是MultiValueMap<String, MultipartFile> ,

但是Entry<String, MultipartFile>却不行,必须写成Entry<String, List<MultipartFile>>

翻翻了源码,原来Entry用的是Map.Entry,而

public interface MultiValueMap<K, V> extends Map<K, List<V>> 
也告诉了我们他们之间的关系。

最终想了想:这样设计的目的,估计是怕前端出现foo=1,foo=2这样的参数的时候,可以方便的合并吧。


tips:

br = new BufferedReader(new FileReader(outFile)); //code A
br = new BufferedReader(new InputStreamReader(new FileInputStream(outFile),"UTF-8"));//code B

outFile是UTF-8格式,linux下可以正常读取。但是window下读出来是乱码,因为windows默认格式是GBK吧

FileReader是字符流,应该无法设置utf8编码,最后还是改为字节流解决。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值