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

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

  这些操作的背后,就是程序员最熟悉的 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种处理方法 。具体代码就不贴了,且个人没有找到实现的方式代码 -_-!

 

个人感悟:

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

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

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

 

转载于:https://www.cnblogs.com/rick168/p/4799438.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值