首页 > 其他分享 >JQuery Ajax使用FormData对象上传文件 图片

JQuery Ajax使用FormData对象上传文件 图片

时间:2022-09-27 22:44:29浏览次数:75  
标签:JQuery 文件 false 对象 FormData Ajax file 上传


通过jQuery Ajax使用FormData对象上传文件

​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"​​属性。

服务器端读文件

从​​Servlet 3.0​​ 开始,可以通过 ​​request.getPart()​​ 或 ​​request.getPars()​​ 两个接口获取上传的文件。

这里不多说,详细请参考官网教程 ​​​Uploading Files with Java Servlet Technology​​​ 以及示例 ​​The fileupload Example Application​

参考

标签:JQuery,文件,false,对象,FormData,Ajax,file,上传
From: https://blog.51cto.com/u_15809398/5717574

相关文章

  • 网页标签功能插: jQuery tags input 翻译api
    看名字应该知道是干嘛用了吧。这种规格标签,因为在写一个后台,用到这种场景,vuejs又没什么可用的,所以这种交互性极强的,还是离不开jquery啊。后悔没用react开发,结合ant里面......
  • jQuery中发起 ajax 请求,自己封装get请求
    jQuery中发起ajax请求参数:1.请求地址   2.参数  3.回调函数(参数为响应数据)//get请求参数拼接到url中$.get("http//127.0.0.1:8000",{a:100,b:200},......
  • ajax 重复请求、请求超时与网络异常的处理
    重复请求的处理发起一个新的请求之前先判断当前是否有相同的请求正在发送,如果有就取消掉。类似于防抖//标识变量letisSending=false;//是否正在发送AJAX请求btns[......
  • ajax 和 react 最显着的区别是什么?
    ajax和react最显着的区别是什么?What’sthemostremarkabledifferencebetweenajaxandreact?目前,Ajax和React之间最大的区别之一是它们是帮助不同网页或应用......
  • AJAX IE缓存问题
    在IE浏览器中如果XMLHttpRequest提交的URL与历史一样,则会使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据或新的数据。1、改进服务器端(1)后台是简单的.aspx文件,直......
  • Flask学习笔记(五)-Flask通过Ajax传输JSON数据
    一.创建项目结构项目文件夹flask-ajax-demo,结构如下: 其中app.py是Python程序,user.html是静态页面。二.发起Ajax请求编写user.html,代码如下:<!DOCTYPEhtml><html......
  • jquery实现点击复制微信号并自动打开微信加好友​
    近期,有建网站客户要求实现在自己的手机网站上实现点击复制微信号并自动打开微信加好友的功能。怎么在自己建网站时,制作出这样的点击复制微信号并自动打开微信加好友功能呢?......
  • jQuery中有哪些方法可以遍历节点
    children():获取匹配元素的子元素集合,不考虑后代元素$(function(){$("div").children()})next()获取匹配元素后面紧邻的同级元素prev()获取匹配元素前紧邻的同级元素si......
  • jQuery中使用过哪些插入节点的方法?他们的区别是什么
    append(),appendTo(),prepend(),prependTo(),after(),insertAfter()before(),insertBefore() 大致可以分为内部追加和外部追加append()表式向每个元素内部追加内容。......
  • jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
    在默认情况下,通过$.extend()合并操作不是递归的(浅拷贝);如果第一个对象的属性本身是一个对象或数组,那么它将完全用第二个对象相同的key重写一个属性。这些值不会被合并。然......