码迷,mamicode.com
首页 > 编程语言 > 详细

Java中request请求之 - 带文件上传的form表单

时间:2015-09-11 00:05:16      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

  常用系统开发中总免不了显示图片,保存一些文件资料等操作。

  这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单。

说起file类型的input,我们往往会遇到问题:

  最为常见的就是编码格式-中文乱码。解决中文乱码最好的方式就是我们的项目全部使用 utf-8 格式的国际编码,因为它是可变字节长度的编码,对于占用2字节的中文绰绰有余了。另外就是使用 String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”); 将服务器编码(以tomcat为例)转换为gbk中文编码。

  其次就是request接收参数的问题。首先看段代码

//-----代码片段 spingMVC上传文件
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;//request强制转换注意

                    MultipartFile file = mRequest.getFile("file");
                    if (!file.isEmpty()) {
                        String fileName = file.getOriginalFilename();
                        if (StringUtils.isNotBlank(fileName)) {// 因为最后一个添加的控件没有上传相应的内容
                            String uuid = UUID.randomUUID().toString();
                            String fileType = fileName.substring(fileName
                                    .lastIndexOf("."));
                            // 使用字符替换图片名称,防止乱码
                            String tempName = uuid.substring(1, 10) + fileType;

                            uploadFilePath = fileRootHelper.getOrigImage()
                                    + tempName;
                            File uploadfile = new File(basepath
                                    + uploadFilePath);// 上传地址

                            File mir = new File(basepath
                                    + fileRootHelper.getOrigImage());// 文件路径

                            if (!mir.exists()) {
                                mir.mkdirs();
                            }
                            file.transferTo(uploadfile);// 开始上传
                        }

执行 MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; 该行代码时,如果请求中不包含file类型的input,必然会产生异常。

而request请求都是经过spring-mvc配置文件的,在没有进入请求方法之前,异常已经产生了。由此,问题来了 ??

如何避免异常产生呢?

  一种比较直观的方法是:

<form action="iconUpload.action" method="post"enctype="multipart/form-data">
  <p>First name: <input type="text" name="fname" /></p>
  <p>Last name: <input type="text" name="lname" /></p>
  <p>Icon <input type="file" name = "ficon"/></p>        
  <input type="submit" value="Submit" />
</form>

  <input type="file" name = "ficon"/> 不选时由后台 file.isEmpty() 判断,而不是在前端做判断。

  还有一种做法是前端做判断传或是不传,后端再次判断有没有文件流过来,分别写2种处理方法 。具体代码就不贴了,且个人没有找到实现的方式代码 -_-!

 

个人感悟:

  每个人思维模式不相同,解决问题的思路也会不同。

  但终归是围绕 ‘解决问题‘ 而展开的,善于学习他人的思维模式,弥补自己的鄙夷。这样才能快速,高效的解决问题。俗话说:没有做不到,只有想不到 。

  虚心接纳他人意见,理解他人,这样不仅对自己成长有所帮助,更是个人修养与价值的体现。多思维是每个人人生道路上不可或缺的财富!!

 

Java中request请求之 - 带文件上传的form表单

标签:

原文地址:http://www.cnblogs.com/Xiawu168/p/4799438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!