HTML5 FormData 方法介绍以及实现文件上传
XMLHttpRequest 是一个浏览器接口,通过它,我们可以使得 Javascript 进行 HTTP (S) 通信。XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式。2008年 2 月,XMLHttpRequest Level 2 草案提出来了,相对于上一代,它有一些新的特性,其中 FormData 就是 XMLHttpRequest Level 2 新增的一个对象,利用它来提交表单、模拟表单提交,当然最大的优势就是可以上传二进制文件。下面就具体介绍一下如何利用 FormData 来上传文件。
FormData 上传文件实例
首先看一下formData的基本用法:FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。只需要把 form 表单作为参数传入 FormData 构造函数即可:
var file;
//获取目前上传的文件
file = image.files[0]; //获取上传的文件名
var formData = new FormData();
formData.append('image', file); //append方法传入formData中
这样就可以直接通过ajax 的 send() 方法将 fd 发送到后台。
以下创建了一个表单 form,表单中除了普通的数据外,还有文件上传,我们直接将 form对象作为参数传入FormData对象:
<input type="file" class="file" id="image" accept="image/gif,image/jpeg,image/jpg,image/png" /> <button id="test" onclick="func()">demo</button>
上述代码创建一个上传图片。
我们初始用jquery ajax 来进行请求数据 代码如下
var url = "http://localhost:8100/detection/troop/faster_R_CNN?shape=480&shape=420";
image_url = "http://localhost/sss/troop.jpg";
var file;
//获取目前上传的文件
file = image.files[0];
var formData = new FormData();
formData.append('image', file); $.ajax({
type: "POST",
url: url,
data: formData,
contentType: false, //告诉jQuery不要去设置Content-Type请求头
headers: {
Accept: "application/json"
},
processData: false, //告诉jQuery不要去处理发送的数据
success: function (response) {
console.log(response)
}
然后我们用XHR原生请求代码如下
1 var url = "http://localhost:8100/detection/troop/faster_R_CNN?shape=480&shape=420";
2 image_url = "http://localhost/sss/troop.jpg";
3 var file;
4 //获取目前上传的文件
5 file = image.files[0];
6 var formData = new FormData();
7 formData.append('image', file);
8 var xhr = new XMLHttpRequest();
9 var url = "http://localhost:8100/detection/troop/faster_R_CNN?shape=480&shape=420";;
10 xhr.open('POST', url, true);
11 xhr.setRequestHeader("Accept", "application/json");
12 xhr.send(formData);
我们发现jQuery中ajax请求和XHR对象请求参数并不一样,因为在jquery中ContenType和processData会默认处理发送的数据,会导致请求报错(500错误,jquery给默认封装了
因此在jQuery中要加false这两个参数。就会正常的请求成功。
HTML5 FormData 方法介绍以及实现文件上传的更多相关文章
- [转] HTML5 FormData 方法介绍以及实现文件上传
XMLHttpRequest 是一个浏览器接口,通过它,我们可以使得 Javascript 进行 HTTP (S) 通信.XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式. ...
- Html5+NodeJS——拖拽多个文件上传到服务器
实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...
- HTML5 + AJAX ( 原生JavaScript ) 异步多文件上传
这是在上篇 HTML5 + AJAX ( jQuery版本 ) 文件上传带进度条 的修改版本.后台代码不变就可以接着使用,但是脚本不再使用jQuery了,改为原生的 JavaScript 代码,所以我 ...
- html5拖拽事件 xhr2 实现文件上传 含进度条
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- HTML5 FormData方法介绍
详细见链接 转载说明:转自CSDN上“诗渊”的博客
- Java java httpclient4.5 进行http,https通过SSL安全验证跳过,封装接口请求 get,post(formdata,json)封装,文件上传下载
package api; import java.util.*; import java.net.URI; import org.apache.http.Consts; import org.apac ...
- Java Web使用Html5 FormData实现多文件上传
前一阵子,迭代一个线上的项目,其中有一个图片上传的功能,之前用的ajaxfileupload.js来实现上传的,不过由于ajaxfileupload.js,默认是单文件上传(虽然可以通过修改源码的方法 ...
- PHP实现多文件上传的一些简单方法
下面我们就通过具体的代码示例,为大家介绍PHP实现多文件上传的一些简单方法. 第一种方法:利用单个文件上传方法 一段简单的form表单代码如下: <!DOCTYPE html> <h ...
- PHP设置图片文件上传大小的具体实现方法
PHP默认的上传限定是最大2M,想上传超过此设定的文件,需要调整PHP.apache等的一些参数 我们简要介绍一下PHP文件上传涉及到的一些参数: •file_uploads :是否允许通过HTTP上 ...
随机推荐
- LeetCode之旅(19)-Power of Two
题目 Given an integer, write a function to determine if it is a power of two. Credits: Special thanks ...
- IOS Dev 需要常看的网站<转>
英文系列 网站 http://Raywenderlich.com 这个不多说了吧,iOS界的百科全书.iOS By tutorial系列书从iOS7到8全买的正版别说499刀了,999刀也入手. ob ...
- 二维码js生成库
jr-qrcode 把字符串生成二维码,并以Base64 URL形式输出. 支持白色二维码,即反色二维码. 兼容性 插件使用了H5的canvas特性进行二维码绘制,最后输出base64 url,因此本 ...
- 关于.h .lib .dll的总结
对VC工程中的调用过程有些迷糊,所以就理清一下: 1.#include "...h"为头文件预编译命令,如果这些代码被修改,则需要重新编译生成预编译头文件. 预编译头的概念(转载) ...
- 与班尼特·胡迪一起做生意 (HZUN-2261)
与班尼特·胡迪一起做生意 AC Time Limit: 1 s Memory Limit: 256 MB Description 马爷作为2-80X的资深土财主,靠着敏锐的商业嗅觉不断 ...
- Ocelot中文文档-转换Claims
Ocelot允许用户访问claims并把它们转换到头部,请求字符串参数和其他claims中.这仅在用户通过身份验证后才可用. 用户通过身份验证之后,我们运行claims转换中间件.这个中间件允许在授权 ...
- 自建Nuget服务器
前言 [PS:原文手打,转载说明出处,博客园] java有Maven,.net有Nuget,概念就不一一阐述了,自己百度.下面直接进入正题 搭建Nuget服务器 作案工具 工具:vs2017,Nuge ...
- DUIR Framework 相关技术介绍
开发者在搭建界面自动化测试框架时,又或者在开发界面自动化控制的机器人时,往往需要对界面进行自动化的程序控制.而现在公司内部使用的杜尔自动化框架,就是一个封装了界面自动化控制逻辑的程序框架.基于该框架, ...
- TensorFlow图像处理API
TensorFlow提供了一些常用的图像处理接口,可以让我们方便的对图像数据进行操作,以下首先给出一段显示原始图片的代码,然后在此基础上,实践TensorFlow的不同API. 显示原始图片 impo ...
- 通过数据流处理-微信小程序生成临时二维码
1.小程序代码 onLoad: function (options) { var that = this api.Login(function (login) { var codeModel = ne ...