zoukankan      html  css  js  c++  java
  • Java中request请求之

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

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

    个人感悟:

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

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

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

  • 相关阅读:
    2021.2.28
    《构建之法》11~16章读后感
    《构建之法》6~10章读后感
    《构建之法》1~5章读后感
    4.7 wait notify
    4.8 wait,notify 的正确姿势
    4.9 park&unpark
    4.10 重新理解线程的状态转换
    第七章 Redis-6.2.1脚本安装
    第三十九章 Centos 7 系统优化脚本
  • 原文地址:https://www.cnblogs.com/rick168/p/4799438.html
Copyright © 2011-2022 走看看