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 相关文章推荐
CSDN轮换广告图片轮换效果
Mar 27 Javascript
JavaScript设置首页和收藏页面的小例子
Nov 11 Javascript
jquery实现焦点图片随机切换效果的方法
Mar 12 Javascript
jQuery实现的漂亮表单效果代码
Aug 18 Javascript
莱鸟介绍javascript onclick事件
Jan 06 Javascript
浅谈js内置对象Math的属性和方法(推荐)
Sep 19 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
JavaScript编程设计模式之构造器模式实例分析
Oct 25 Javascript
使用百度地图实现地图网格的示例
Feb 06 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
Vue中component标签解决项目组件化操作
Sep 04 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中上传大体积文件时需要的设置
2006/10/09 PHP
php设计模式之单例模式代码
2016/06/11 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
实例详解Python装饰器与闭包
2019/07/29 Python
python list转置和前后反转的例子
2019/08/26 Python
python中dict()的高级用法实现
2019/11/13 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
作风建设整改方案
2014/10/27 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
干部考核工作总结
2015/08/12 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python