您的位置:首页 > 编程语言 > Java开发

Spring MVC 中的同步图片上传 参数解析问题

2016-11-06 18:19 232 查看
在SpringMvc架构下进行同步图片上传,表单提交参数非常多,且页面存在动态生成的input和select,因此通过spring提供的@RequestParam()注解来接受参数就显得有些捉襟见肘了,于是各种想办法解决此问题!在看到以为仁兄的文章后http://blog.csdn.NET/lwphk/article/details/43015829 幡然醒悟,原来Spring的org.springframework.web.multipart.commons.CommonsMultipartResolver类是对原生HttpServletRequest进行了包装:



Spring的转换器里面就是调用common-fileupload的方式解析,然后再使用parseFileItems()方法封装成自己的文件对象

因此在使用common-fileupload的上传方法是行不通的,转换出来的Request将会是一个空值!

DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list){
if(item.isFormField()){

}else{
//item.write(new File(""));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}


所以在这里我们仅仅只需要使用Spring提供的MultipartHttpServletRequest类把我们的request转换为二进制数据二和普通数据分离的request对象即可

protected static void uploadAndResolveParamters(HttpServletRequest request, PageData pd){

//把带二进制表单数据的request对象交给spring转换 得到一个文件和普通数据分开的新request对象
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

Map<String, MultipartFile> imageFiles = multipartRequest.getFileMap();          //获得Request中的图片

for (Iterator<Entry<String, MultipartFile>> iterator = imageFiles.entrySet().iterator(); iterator.hasNext();) {

Entry<String, MultipartFile> imageFile = iterator.next();   //循环迭代上传Request中的所有图片

//...
}

Map<String, String[]> parameterMaps = multipartRequest.getParameterMap();   //获得request对象的请求参数

for (Iterator<Entry<String, String[]>> iterator = parameterMaps.entrySet().iterator(); iterator.hasNext();) {

Entry<String, String[]> entry = iterator.next();

String key = entry.getKey();
String[] value = entry.getValue();

//....
}
}


接下来的工作就比较Easy了,就不多说了!!!第一次写博文,献丑了。。不好的地方希望大家多指点!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息