文档章节

通过Ajax方式上传文件,使用FormData进行Ajax请求

文文1
 文文1
发布于 2016/06/22 01:23
字数 710
阅读 55
收藏 15
点赞 0
评论 0

通过传统的form表单提交的方式上传文件:

Html代码 

<form id= "uploadForm" action= "http://localhost:8080/cfJAX_RS/rest/file/upload" method= "post" enctype ="multipart/form-data">
     <h1 >测试通过Rest接口上传文件 </h1>
     <p >指定文件名: <input type ="text" name="filename" /></p>
     <p >上传文件: <input type ="file" name="file" /></p>
     <p >关键字1: <input type ="text" name="keyword" /></p>
     <p >关键字2: <input type ="text" name="keyword" /></p>
     <p >关键字3: <input type ="text" name="keyword" /></p>
     <input type ="submit" value="上传"/>
</form>

不过传统的form表单提交会导致页面刷新,但是在有些情况下,我们不希望页面被刷新,这种时候我们都是使用Ajax的方式进行请求的:

Js代码 

$.ajax({  

     url : "http://localhost:8080/STS/rest/user",  
     type : "POST",  
     data : $( '#postForm').serialize(),  
     success : function(data) {  
          $( '#serverResponse').html(data);  
     },  
     error : function(data) {  
          $( '#serverResponse').html(data.status + " : " + data.statusText + " : " + data.responseText);  
     }  
});  

如上,通过$('#postForm').serialize()可以对form表单进行序列化,从而将form表单中的所有参数传递到服务端。

但是上述方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。

不过如今主流浏览器都开始支持一个叫做FormData的对象,有了这个FormData,我们就可以轻松地使用Ajax方式进行文件上传了。

 

关于FormData及其用法


FormData是什么呢?我们来看看Mozilla上的介绍。

XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件. 

所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。

参见:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/FormData

 

这里只展示一个通过from表单来初始化FormData的方式

<form enctype="multipart/form-data" method="post" name="fileinfo">

Js代码 

var oData = new FormData(document.forms.namedItem("fileinfo" ));  

oData.append( "CustomField", "This is some extra data" );  
var oReq = new XMLHttpRequest();  
oReq.open( "POST", "stash.php" , true );  
oReq.onload = function(oEvent) {  
      if (oReq.status == 200) {  
          oOutput.innerHTML = "Uploaded!" ;  
     } else {  
          oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>";  
     }  
};  
oReq.send(oData);  

 

参见:https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Objects

 

使用FormData,进行Ajax请求并上传文件


这里使用JQuery,但是老版本的JQuery比如1.2是不支持的,最好使用2.0或更新版本:

Html代码 

<form id= "uploadForm">  

      <p >指定文件名: <input type="text" name="filename" value= ""/></p >  
      <p >上传文件: <input type="file" name="file"/></ p>  
      <input type="button" value="上传" onclick="doUpload()" />  
</form>  

Js代码 

function doUpload() {  

     var formData = new FormData($( "#uploadForm" )[0]);  
     $.ajax({  
          url: 'http://localhost:8080/cfJAX_RS/rest/file/upload' ,  
          type: 'POST',  
          data: formData,  
          async: false,  
          cache: false,  
          contentType: false,  
          processData: false,  
          success: function (returndata) {  
              alert(returndata);  
          },  
          error: function (returndata) {  
              alert(returndata);  
          }  
     });  
}  

本文转载自:

共有 人打赏支持
文文1
粉丝 19
博文 328
码字总数 113821
作品 0
长沙
程序员
利用FormData进行ajax上传文件

个人实现方式: html代码 js代码: 后台python代码 很简洁的代码,便可以达到Ajax方式上传文件,上面的代码中使用<input type="file" />这种传统的选择文件的方法产生文件对象,HTML5还支持使...

单蛙 ⋅ 2016/06/17 ⋅ 0

通过Ajax方式上传文件

通过传统的form表单提交的方式上传文件: 不过传统的form表单提交会导致页面刷新,但是在有些情况下,我们不希望页面被刷新(即异步刷新),这种时候我们都是使用Ajax技术实现。 在js中添加$...

初雪之音 ⋅ 2016/08/03 ⋅ 0

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

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明。但上传...

郏高阳 ⋅ 2016/09/07 ⋅ 0

多种上传图片的方法

tags: 图片上传, multipart, 截图上传, file对象, FormData, 拖拽上传图片, dataTransfer, readAsDataURL 一个如下所示的发布框,经常会出现在各种微博、社区、论坛站点上,这类发布形式虽然...

筱飞 ⋅ 2016/06/07 ⋅ 0

JS中使用FormData上传文件、图片的方法

转自http://www.jb51.net/article/89998.htm 参考:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/UsingFormDataObjects FormData 废话不多说,先上最后我用的完成版: 完整实......

lllo3o ⋅ 2017/05/23 ⋅ 0

使用FormData,进行Ajax请求并上传文件

使用FormData,进行Ajax请求并上传文件html代码 js代码

11968033 ⋅ 2016/11/03 ⋅ 0

AJAX的post请求与上传文件

班级编号:VIP14 学员名字:端碗吹水 课程名称:AJAX的post请求与上传文件 上课时间:2017-12-26 AJAX的post请求 之前介绍了AJAX的get的请求方式与跨域请求,除此之外AJAX还可以进行异步的p...

ZeroOne01 ⋅ 2017/12/28 ⋅ 0

Python自动化开发学习24-Django中(AJAX)

讲师的博客地址:http://www.cnblogs.com/wupeiqi/articles/5703697.html 。号称是AJAX全套 原生Ajax Ajax主要就是使用 XmlHttpRequest 对象来完成请求的操作,该对象在主流浏览器中均存在(...

骑士救兵 ⋅ 05/18 ⋅ 0

超易用的浏览器请求框架--catta

catta catta 是一个轻量级的 Javascript 浏览器请求框架,支持 Fetch,AJAX,JSONP,甚至支持自定义的请求方式。 使用非常非常非常简单 支持自动检测浏览器来选择请求方式 统一各种请求方式的...

逝者的梦 ⋅ 2017/01/12 ⋅ 0

form表单通过ajax提交文件

例子:在页面上传一个csv文件,web服务器端用php解析上传的csv文件并入库 前端页面代码: form的enctype必须是multipart/form-data才可以上传多个文件,ajax通过FormData来上传数据,ajax的c...

ShutLove ⋅ 01/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 24分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 27分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 36分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部