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 28 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
JavaScript中eval()函数用法详解
Dec 14 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
前端js弹出框组件使用方法
Aug 24 Javascript
javascript将list转换成树状结构的实例
Sep 08 Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
微信小程序实现打卡日历功能
Sep 21 Javascript
vue input输入框关键字筛选检索列表数据展示
Oct 26 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 ZipArchive压缩函数详解实例
2013/11/06 PHP
使用php清除bom示例
2014/03/03 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
python抽取指定url页面的title方法
2018/05/11 Python
python 获取字符串MD5值方法
2018/05/29 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
大学生学习2014全国两会心得体会
2014/03/13 职场文书
机械专业求职信范文
2014/07/15 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
学生个人总结范文
2015/02/15 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
二审代理词范文
2015/05/25 职场文书
消费者理赔投诉书
2015/07/02 职场文书
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript