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

  这些操作的背后,就是程序员最熟悉的 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表单的更多相关文章

  1. 【文件上传】文件上传的form表单提交方式和ajax异步上传方式对比

    一.html 表单代码 …… <input type="file" class="file_one" name="offenderExcelFi ...

  2. Layer文件上传同时传递表单数据

    (1)index.html <!DOCTYPE html> <html> <head> <title>TODO supply a title</t ...

  3. servlet文件上传2——复合表单提交(数据获取和文件上传)

    上传文件时表单enctype属性必须要更改为<enctype='multipart/form-data'>:采用post提交表单,元素需要有name属性: 利用第三方jar包(common ...

  4. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  5. jfinal文件上传和form表单值为null的解决方法

    今天使用jfinal做上传提交的时候,遇到一个问题:添加了上传功能,原来的form表单submit提交时所有值都为null了,研究了很长时间,终于发现 在jfinal上传时候,jsp加 enctype ...

  6. 文件上传之form表单篇

    form表单上传文件 作为本系列的最后一篇,也是楼主知道的第三种文件上传的方式--隆重推出Form表单 这是最传统的上传文件,提交数据的方式 Html: <form action="/ ...

  7. 理解流方式上传和form表单上传

    流方式上传: $post_input = 'php://input'; $save_path = dirname( __FILE__ ); $postdata = file_get_contents( ...

  8. Java中简单测试FastDFS的文件上传

    pom.xml文件内容如下: <dependencies> <!-- fastdfs --> <dependency> <groupId>org.cso ...

  9. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. python 语料处理(从文件夹中读取文件夹中文件,分词,去停用词,去单个字)

    # -*- coding:utf8 -*- import os import jieba def splitSentence(inputFile): fin = open(inputFile, 'r' ...

  2. Linux启动过程

    系统BIOS是当你点击开机键是第一个运行的程序.1. 首先主板需要接收到一个稳定的电源供给信号.如果没有得到稳定的电源供给系统自动关闭.2. 当接受到一个稳定的电源供给信号,处理器会启动,当处理器启动 ...

  3. 一个应用层的Makefile

    CC = gcc #gcc编译器LIB= -lpthread #需要链接的库文件CFLAGS=-std=gnu99 #C编译器的选项,C99标准OBJ=test.o gpio.o #生成的汇编文件PR ...

  4. A trip through the Graphics Pipeline 2011_06_(Triangle) rasterization and setup

    Welcome back. This time we’re actually gonna see triangles being rasterized – finally! But before we ...

  5. js滚动加载插件

    function $xhyload(o){ var that=this; if(!o){ return; }else{ that.win=$(o.config.obj); that.qpanel=$( ...

  6. 关于Action快捷键和小键盘的问题

    在使用全尺寸键盘的时候 键盘右边都有一排小键盘 但是这个小键盘的数字键值和普通键盘的数字键值是不一样的 在ANSI码里 标准数字键值是$30..$39, 而小键盘的键值是$60..$69 这样问题就来 ...

  7. Shell displays color output

    格式: echo "/033[字背景颜色;字体颜色m字符串/033[控制码" 如果单纯显示字体颜色可以固定控制码位0m. 格式: echo "/033[字背景颜色;字体颜 ...

  8. wp插件

  9. rabbitMQ集群部署以及集群之间同步

    MQ集群部署 期待的部署架构 其中,一个机房有两台机器部署MQ,并组成集群,有一个机房的MQ集群作为中心集群,其他机房的MQ集群将消息同步到中心MQ集群中. 安装erlang,略.. 安装rabbit ...

  10. busybox rootfs 启动脚本分析(一)

    imx6文件系统启动脚本分析.开机运行/sbin/init,读取/etc/inittab文件,进行初始化. 参考链接 http://blog.163.com/wghbeyond@126/blog/st ...