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种处理方法 。具体代码就不贴了,且个人没有找到实现的方式代码 -_-!
个人感悟:
每个人思维模式不相同,解决问题的思路也会不同。
但终归是围绕 '解决问题' 而展开的,善于学习他人的思维模式,弥补自己的鄙夷。这样才能快速,高效的解决问题。俗话说:没有做不到,只有想不到 。
虚心接纳他人意见,理解他人,这样不仅对自己成长有所帮助,更是个人修养与价值的体现。多思维是每个人人生道路上不可或缺的财富!!
Java中request请求之 - 带文件上传的form表单的更多相关文章
- 【文件上传】文件上传的form表单提交方式和ajax异步上传方式对比
一.html 表单代码 …… <input type="file" class="file_one" name="offenderExcelFi ...
- Layer文件上传同时传递表单数据
(1)index.html <!DOCTYPE html> <html> <head> <title>TODO supply a title</t ...
- servlet文件上传2——复合表单提交(数据获取和文件上传)
上传文件时表单enctype属性必须要更改为<enctype='multipart/form-data'>:采用post提交表单,元素需要有name属性: 利用第三方jar包(common ...
- Struts2文件上传(基于表单的文件上传)
•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ...
- jfinal文件上传和form表单值为null的解决方法
今天使用jfinal做上传提交的时候,遇到一个问题:添加了上传功能,原来的form表单submit提交时所有值都为null了,研究了很长时间,终于发现 在jfinal上传时候,jsp加 enctype ...
- 文件上传之form表单篇
form表单上传文件 作为本系列的最后一篇,也是楼主知道的第三种文件上传的方式--隆重推出Form表单 这是最传统的上传文件,提交数据的方式 Html: <form action="/ ...
- 理解流方式上传和form表单上传
流方式上传: $post_input = 'php://input'; $save_path = dirname( __FILE__ ); $postdata = file_get_contents( ...
- Java中简单测试FastDFS的文件上传
pom.xml文件内容如下: <dependencies> <!-- fastdfs --> <dependency> <groupId>org.cso ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- php课程---建立一个简单的下拉列表框
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS开发windows phone8.1系列之2
http://msdn.microsoft.com/zh-cn/library/windows/apps/dn629636.aspx Windows.Storage.ApplicationData.r ...
- do put in ruby
apikey: XO.apikeys.cms, data: { favoriteItems: [{ UserId: SaveToFavoriteVar.content.FavoriteItem.Use ...
- String类中一些的方法的应用
一.整理string类 1.Length():获取字串长度: 2.charAt():获取指定位置的字符: 3.getChars():获取从指定位置起的子串复制到字符数组中:(它有四个参数) 4.rep ...
- cocos2dx 3.x(在Mac平台下利用Eclipse打包安卓apk安装包详细教程)
最近在学习cocos2dx在MAC上如何打包apk,今天先把安装JDK和ANT的过程记来. 首先,打开终端,输入"java -version" 点击回车后,出现如下提示: 我们的M ...
- 我的新发现:AVL树旋转的一个特性
关于AVL树旋转的代码网络上铺天盖地. 一些经典的实现方法如下: AVLTree SingleLeftRotation(AVLTree A) { AVLTree B = A->left; A-& ...
- 让Placeholder在IE中燥起来
网上有好多关于这方面解决兼容性问题的文章,很多招式,学会这一招,让你轻松搞定Placeholder的兼容性,叫我好人,拿走,不谢.... placeholder属性是HTML5 中为input添加的. ...
- CEUtils---我在Unity中使用的一些小类库(不断更新中)
项目地址: http://git.oschina.net/eran/CEUtils
- 在SQLite Expert上用日期类型字段作为条件查询时注意日期的格式化
经验之谈: 情况一:没有查询结果 and R_CheckInTime > '2015-7-12 18:47:00' and R_CheckInTime < '2015-7-18 18:48 ...
- c语言的学习秘籍
c语言其实是一环套一环胡的,最开始的是变量,然后是数组,接着是结构体,接着是链表.(其他的是c语言的语法,那东西大多了就会了.) 学习时可以从程序在电脑里的内存看起,先了解变量,将多个变量连起来就是数 ...