jQuery Ajax使用FormData对象上传文件的方法


Posted in Javascript onSeptember 07, 2016

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。 在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明。 但上传文件部分只有底层的XMLHttpRequest对象发送上传请求,那么怎么通过jQuery的Ajax上传呢? 本文将介绍通过jQuery使用FormData对象上传文件。

使用<form>表单初始化FormData对象方式上传文件

HTML代码

<form id="uploadForm" enctype="multipart/form-data">
<input id="file" type="file" name="file"/>
<button id="upload" type="button">upload</button>
</form>

javascript代码

$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: new FormData($('#uploadForm')[0]),
processData: false,
contentType: false
}).done(function(res) {
}).fail(function(res) {});

这里要注意几点:

processData设置为false。因为data值是FormData对象,不需要对数据做处理。

<form>标签添加enctype="multipart/form-data"属性。

cache设置为false,上传文件不需要缓存。

contentType设置为false。因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。

上传后,服务器端代码需要使用从查询参数名为file获取文件输入流对象,因为<input>中声明的是name="file"。 如果不是用<form>表单构造FormData对象又该怎么做呢?

使用FormData对象添加字段方式上传文件

HTML代码

<div id="uploadForm">
<input id="file" type="file"/>
<button id="upload" type="button">upload</button>
</div>

这里没有<form>标签,也没有enctype="multipart/form-data"属性。 javascript代码

var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function(res) {
}).fail(function(res) {});

这里有几处不一样:

append()的第二个参数应是文件对象,即$('#file')[0].files[0]。

contentType也要设置为‘false'。 从代码$('#file')[0].files[0]中可以看到一个<input type="file">标签能够上传多个文件, 只需要在<input type="file">里添加multiple或multiple="multiple"属性。

jQuery Ajax使用FormData对象上传文件的方法

后台接收文件:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
</bean>
@RequestMapping(value = "/import_tg_resource")
public ModelAndView import_tg_resource(@RequestParam(value = "file", required = false) MultipartFile[] files, HttpServletRequest request, ModelMap model) {
System.out.println("开始批量上传:文件数量:" + files.length);
for (MultipartFile file : files ) {
String path = request.getSession().getServletContext().getRealPath("upload");
String fileName = file.getOriginalFilename();
String prefix = fileName.substring(fileName.lastIndexOf("."));
fileName = new Date().getTime() + prefix;
// System.out.println("保存路径 " + path);
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
file.transferTo(targetFile);
}
}

以上所述是小编给大家介绍的jQuery Ajax使用FormData对象上传文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 未结束的字符串常量错误解决方法
Jun 13 Javascript
几个有趣的Javascript Hack
Jul 24 Javascript
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
JS 页面计时器示例代码
Oct 28 Javascript
html5 canvas js(数字时钟)实例代码
Dec 23 Javascript
JS脚本实现动态给标签控件添加事件的方法
Jun 02 Javascript
在线引用最新jquery文件的实现方法
Aug 26 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
Vue组件系列开发之模态框
Apr 18 Javascript
vue elementUI table 自定义表头和行合并的实例代码
May 22 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 #Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 #Javascript
JS实现页面载入时随机显示图片效果
Sep 07 #Javascript
JS简单实现浮动窗口效果示例
Sep 07 #Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 #Javascript
Vue.js快速入门教程
Sep 07 #Javascript
jQuery实现简洁的轮播图效果实例
Sep 07 #Javascript
You might like
十天学会php之第四天
2006/10/09 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
PHP教程 基本语法
2009/10/23 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
js实现表格数据搜索
2020/08/09 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
机电专业毕业生求职信
2013/10/27 职场文书
汽车运用工程毕业生自荐信
2013/10/29 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
导游实习生自荐书
2014/01/28 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书