修改HttpServletRequest的中的参数值

来源:互联网 发布:天刀女神威捏脸数据 编辑:程序博客网 时间:2024/06/06 13:59

利用SpringMVC上传文件,方法A

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

@RequestMapping(value = "/saveJobInfo", method = {RequestMethod.POST})@ResponseBodypublic 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 Abr = new BufferedReader(new InputStreamReader(new FileInputStream(outFile),"UTF-8"));//code B

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

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




0 0
原创粉丝点击