jquery.form.js框架实现文件上传功能案例解析(springmvc)


Posted in Javascript onMay 26, 2016

上一篇 Bootstrap自定义文件上传下载样式(https://3water.com/article/85156.htm)已经有一段时间了,一直在考虑怎么样给大家提交一篇完美的逻辑处理功能。现在我结合自己的实际工作给大家分享一下。
使用的技术有jquery.form.js框架, 以及springmvc框架。主要实现异步文件上传的同时封装对象,以及一些注意事项。
功能本身是很简单的,但是涉及到一些传递参数类型的问题。例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中分享。
重点: html表格三要素: action="fileUpload/fileUpload" method="post" enctype="multipart/form-data";
1. 最简单的表单直接提交
html代码:

<body>
 <form action="fileUpload/fileUpload" method="post" enctype="multipart/form-data">
 <input type="text" name="password">
 <input type="file" name="file">
 <input type="text" name="username">
 <input type="submit" value="submit">
 </form>
 <button id="button">提交</button>
</body>

java代码

@Controller
@RequestMapping("/fileUpload")
public class FileUpload {

 @RequestMapping("/fileUpload")
 @ResponseBody
 public String FileUpload1(@RequestParam("file")MultipartFile file/*, @RequestParam("username")String username*/){
 System.out.println("------------------------------- "+ file.getSize());
 if(!file.isEmpty()){
 System.out.println("Process file: "+file.getOriginalFilename() );
 try {
 FileUtils.copyInputStreamToFile(file.getInputStream(), new File("c:\\temp\\imooc\\", System.currentTimeMillis()+ file.getOriginalFilename()));
 } catch (IOException e) {
 
 e.printStackTrace();
 }
 }
 return "NewFile";
 }
}

具体的springmvc配置,包括文件上传的配置如下
准备工作:
需要把Jakarta Commons FileUpload及Jakarta Commons io的包放lib里。
这边的包是:
commons-fileupload-1.1.1.jar
commons-io-1.3.2.jar
然后在spring-servlet.xml进行multipartResolver配置,不配置好上传会不好用。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
 <property name="maxUploadSize"><value>100000</value></property> 
 <property name="defaultEncoding"><value>UTF-8</value></property> 
</bean>

接下来就是页面了:
注意Form的写法和文件上传组件的写法。

<form action="uploadPosdetailFile.html" method="post" ENCTYPE="multipart/form-data">
 <div class="form" >
 <p>
 <span class="req"><input id="startDateTxt" name="startDateTxt" class="field size4" title="Enter the date" /></span>
 <label>Start Date: <span>(Date format:MM/dd/yyyy,eg:01/01/2014)</span></label>
 </p>
 
 <p>
 <span class="req"><input id="endDateTxt" name="endDateTxt" class="field size4" title="Enter the date" /></span>
 <label>End Date: <span>(Date format:MM/dd/yyyy,eg:12/25/2014)</span></label>
 </p>
 
 <p>
 <span class="req"><input type="file" name="uploadFileCtrl" class="field size4" title="Choose the file" /></span>
 <label>Upload file: <span>(click browse to choose)</span></label>
 </p>
 </div>
 
 <div class="buttons">
 <input id="queryBtn" type="Submit" class="button" value="Submit" />
 </div>
 
 </form>

再在控制器里写处理代码,注意参数和页面控件的对应关系:

@RequestMapping(value="/uploadPosdetailFile")
 public String uploadPosdetailFile(@RequestParam("startDateTxt") String startDateTxt, 
   @RequestParam("endDateTxt") String endDateTxt,
   @RequestParam("uploadFileCtrl") MultipartFile file,HttpServletRequest request,HttpServletResponse response){
 try {
 System.out.println("@@@@@@@@@1.startDateTxt="+startDateTxt);
 System.out.println("@@@@@@@@@2.endDateTxt="+endDateTxt);
 System.out.println("@@@@@@@@@3.file="+file.getOriginalFilename());// 得到上传文件的文件名
 
 if(file.isEmpty()==false){
 InputStream is=file.getInputStream();
 InputStreamReader isr = new InputStreamReader(is);

  BufferedReader br=new BufferedReader(isr); 

  String s;
  while((s=br.readLine())!=null ){
  System.out.println(s);
  }

 br.close();
 isr.close();
 is.close();
 }
 
 
 return "/pages/posdetail/uploadposdetailresult/index.jsp";
 } catch (Exception e) {
 e.printStackTrace();
 logger.error(e);
 
 request.setAttribute("error", e.getClass());
 request.setAttribute("reason", e.getMessage());
 StackTraceElement[] arr=e.getStackTrace();
 request.setAttribute("stackTraceElements", arr);
 
 return "pages/error/index.jsp";
 }
 }

2. 使用jquery.form.js的ajaxSubmit方法
html代码以及java代码保持不变,给id=button的按钮添加事件

$("#button").click(function(){
 var hideForm = $('form'); 
 var options = { 
 dataType : "json", 
 /*data: {'file': $("input[type=file]").val(), "username": '123', password: "123"},*/
 beforeSubmit : function() { 
 alert("正在上传"); 
 }, 
 success : function(result) { 
 alert('成功上传!'); 
 
 }, 
 error : function(result) { 
  
 } 
 }; 
 hideForm.ajaxSubmit(options); 
 });

3. 在后台使用一个User对象接收username和password。

<form action="fileUpload/fileUpload" method="post" enctype="multipart/form-data">
 <input type="file" name="file">
 <input type="submit" value="submit">
</form>

有可能你会按照下面的步骤做: 封装表单数据作为一个json对象, 给上面的js代码添加data 
data:{'file': $("input[type=file]").val(), 'user':{"username": '123', password: "123"}}
在此处其实是画蛇添足,这种情况下发送的请求的详细情况如图:

  jquery.form.js框架实现文件上传功能案例解析(springmvc)

此时页面会报错415
----------------------------------------------------------------
最合理的代码应该是:html代码与1相同, js代码与2相同, java代码
public String FileUpload1(@RequestParam("file")MultipartFile file, User user){
而且User、前面不能加@RequestBody。

更多精彩内容,请点击《jQuery上传操作汇总》, 《spring上传下载专题》进行深入学习和研究。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
Apr 16 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
使用时间戳解决ie缓存的问题
Aug 20 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
Aug 22 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
利用浮层使select不可选的实现方法
Dec 03 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
AngularJs点击状态值改变背景色的实例
Dec 18 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
js+css实现红包雨效果
Jul 12 Javascript
jQuery过滤特殊字符及JS字符串转为数字
May 26 #Javascript
Bootstrap自定义文件上传下载样式
May 26 #Javascript
jQuery控制文本框只能输入数字和字母及使用方法
May 26 #Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 #Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 #Javascript
怎么引入(调用)一个JS文件
May 26 #Javascript
JS加载器如何动态加载外部js文件
May 26 #Javascript
You might like
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
vue观察模式浅析
2018/09/25 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
详谈python http长连接客户端
2017/06/12 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
python实现按日期归档文件
2021/01/30 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
考试退步检讨书
2014/01/15 职场文书
幼儿教师考核制度
2014/01/25 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android