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 图片延迟加载并等比缩放插件
Nov 09 Javascript
JS延迟加载(setTimeout) JS最后加载
Jul 15 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
Nov 20 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
Dec 04 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
基于WebUploader的文件上传js插件
Aug 19 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
Vue v-for循环之@click点击事件获取元素示例
Nov 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
用PHP解决的一个栈的面试题
2014/07/02 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
utf8的编码算法 转载
2006/12/27 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python实现处理管道的方法
2015/06/04 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python的历史与优缺点整理
2020/05/26 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
酒店节能减排方案
2014/05/26 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
就业推荐表导师评语
2014/12/31 职场文书
收银员岗位职责范本
2015/04/07 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
师德师风培训感言
2015/08/03 职场文书
全民创业工作总结
2015/08/13 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL