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 相关文章推荐
JS TextArea字符串长度限制代码集合
Oct 31 Javascript
JS正则中的RegExp对象对象
Nov 07 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
Jquery api 速查表分享
Jan 12 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
javascript每日必学之继承
Feb 23 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
解决vue 引入子组件报错的问题
Sep 06 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 08 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 Javascript
JavaScript代码简化技巧实例解析
Sep 09 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
php数组键名技巧小结
2015/02/17 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python for循环中的陷阱详解
2018/07/13 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
python如何制作英文字典
2019/06/25 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
python 读取数据库并绘图的实例
2019/12/03 Python
python单例设计模式实现解析
2020/01/07 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
车祸赔偿收入证明
2014/01/09 职场文书
大学军训通讯稿
2014/01/13 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
企业党员个人自我评价
2014/09/20 职场文书
先进个人申报材料
2014/12/30 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
个人先进事迹总结
2015/02/26 职场文书
个人自荐书范文
2015/03/09 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers