Ajax请求参数为文件类型
1、图片用get请求,回调函数中返回的数据就是流文件,在回调函数中再使用post请求
2、JS将文件像form表单一样提交到后台 : https://www.cnblogs.com/HeKaiYue/p/7147752.html (亲测有效)
这里使用到XMLHttpRequest 2级中的 FormData 对象 : https://blog.csdn.net/saharalili/article/details/79002568
(题外话:个人经验 XMLHttpRequest 1级中的send()方法只能是字符串作为参数,一般是形如 "user="+username+"&pwd="+password 这种参数。参考;
XMLHttpRequest 2级中send()方法的参数增加了FormData 对象的参数。ajax要发送文件,必须把请求体转换为 FormData 对象发送。)
<div>
<input type="file" id="myfile">
<input type="button" value="上传" onclick="HeadPortraitPicture()">
</div>
function HeadPortraitPicture()
{
if (document.getElementById('myfile').files[0] != null) {//判断上传的文件是否为空
var fd = new FormData();
fd.append("file", document.getElementById('myfile').files[0]);//这是获取上传的文件
fd.append("api_id", "198ae4a939f54cf99116fdefffcb3e40");//这是获取上传的文件
fd.append("api_secret", "86090f1e697d436f85b0552d934a7df4");//这是获取上传的文件
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://cloudapi.linkface.cn/ocr/idcard");//要传到后台方法的路径
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);//返回来的数据
xhr.addEventListener("error", uploadFailed, false);//返回异常
xhr.addEventListener("abort", uploadCanceled, false);//返回连接异常
xhr.send(fd);//放入文件发送到后台
}
}
function uploadProgress(evt) {
if (evt.lengthComputable) {
//var percentComplete = Math.round(evt.loaded * 100 / evt.total);//可以在这里接收进度条数据
}
else {
alert("无法计算!");
}
}
function uploadComplete(evt) {
/* 服务器返回数据*/
var message = evt.target.responseText;//接收返回来的数据
} function uploadFailed(evt) {
alert("上传出错.");
} function uploadCanceled(evt) {
alert("上传已由用户或浏览器取消删除连接.");
}
3、浏览器出于安全考虑,选择上传的图片必须由用户来选择,也就是说标签中不能设置默认文件(不像其它的表单可以设置默认值)。js中也不能修改 input[type="file"] 表单的value属性值,
value属性是一个只读属性,是一个假路径,基本没什么用。 参考:https://segmentfault.com/q/1010000009883479
4、使用jquery提交FormData数据 : 参考链接
html的代码和第2点的一样的
function HeadPortraitPicture() {
var fd = new FormData();
fd.append("file", document.getElementById('myfile').files[0]);//这是获取上传的文件
fd.append("api_id", "198ae4a939f54cf99116fdefffcb3e40");//这是获取上传的文件
fd.append("api_secret", "86090f1e697d436f85b0552d934a7df4");//这是获取上传的文件
$.ajax({
url: "https://cloudapi.linkface.cn/ocr/idcard",
type: 'POST',
data: fd,
contentType: false,
async:true,
processData: false,
success: function (res) {
console.log(res);
}
});
}
Http请求中请求头Content-Type 为 form-data、x-www-form-urlencoded、raw、binary的区别
1、参考:https://blog.csdn.net/ye1992/article/details/49998511 或 https://www.jianshu.com/p/45a7c3de9281
Ajax请求参数为文件类型的更多相关文章
- SSM框架下,使用ajax请求上传文件(doc\docx\excel\图片等)
1.准备工作 1.1.添加上传必要jar包 <dependency> <groupId>commons-io</groupId> <artifactId> ...
- JQuery Ajax 请求参数 List 集合处理
引言 JQuery Ajax 发送请求参数一般都是基本类型,比如 String.int:那么,请求参数如果是 List 集合应该如何处理呢? 情况一:Aajx 发送 List 类型请求参数 举例如下: ...
- Ajax请求参数较长导致请求失败
Ajax请求参数比较长,第5行参数大概1100个字符吧,是接口的请求报文. $.ajax({ type:"POST", url:"${ctx}/test.action?m ...
- Ajax请求参数到一个URL包含下划线或者v(_、v)
Ajax请求参数到一个URL包含下划线或者v 初学者的我,在F12时,看到这个地址就会很奇怪,不理解什么东西 经过查找了解到浏览器默认开启缓存,该参数不是其他请求所必须的,把它去掉不影响数据的获取 h ...
- springmvc:请求参数绑定集合类型
一.请求参数绑定实体类 domain: private String username; private String password; private Double money; private ...
- jquery ajax 请求参数详细说明 及 实例
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- Ajax 请求下载 Execl 文件
通过Ajax请求下载Execl 的问题,掉进一个坑里半个多小时,特此来记录一下 . 起初 我误以为是后台的问题,然而调试了一下并不是这样的,也不会报错,且进入了success 函数. 以下的事件及请 ...
- Ajax请求参数解释
ajax常用的两个请求是get和post,而springmvc的控制层可以接收ajax请求. 但是这个过程非常灵活,变化很大,容易出错. $.ajax({ url : SITE_PATH + &quo ...
- ajax请求不能下载文件(转载)
最近在做文件下载,后台写了个控制层,直接走进去应该就可以下载文件,各种文件图片,excel等 但是起初老是下载失败,并且弹出下面的乱码: 前台请求代码: $('#fileexcel').unbind( ...
随机推荐
- qt 学习(六) 数据库注册用户
做什么: 1 登陆按钮按下出现注册页面, 2 输入账号 判断是否可用 查询数据库,用户名是否已经注册 3 输入密码 判断密码格式 4 输入邮箱 判断邮箱格式 查询数据库,邮箱是否已经注册 ...
- nucleus plus代码学习
int.S: ;************************************************************************ ;* ;* FUNCTION ;* ; ...
- linux基础知识-目录结构
linux的目录结构/bin:是Binary的缩写,这个目录存放着系统必备执行命令 /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文 件,自己的安装别放这里 /d ...
- jdbc 数据库批处理insert操作
package blob; import java.sql.Connection; import java.sql.PreparedStatement; import jdbc.utils.*; // ...
- 【Java架构:基础技术】一篇文章搞掂:Gradle
前言 Gradle是什么: Gradle提供了一个域特定语言(DSL),用于描述构建 它使用 Groovy 语言,使其更容易来形容和构建 Gradle 中的每一个构建脚本使用UTF-8进行编码保存,并 ...
- Weblogic console控制台密码更改后导致重启服务失败
weblogic版本10.3.3.0 更改控制台密码后,服务重启失败,报错如下: ----------------------------------------------------------- ...
- cesium清除选定事件
cesium清除选定事件 此处的案例不一定适合你的项目,但可以给你一个思路.清除选定,就是还原你选中之前的状态.比如你点击一个面高亮,面的颜色发生改变:并且会弹出一个divPoint框.此时的清除选定 ...
- sparkSQL获取DataFrame的几种方式
sparkSQL获取DataFrame的几种方式 1. on a specific DataFrame. import org.apache.spark.sql.Column df("col ...
- USACO 2014 US Open Dueling GPS's /// SPFA
题目大意: 给定n个点m条边的有向图 有两个GPS 分别认为 A[i]到B[i] 的一条边的花费是P[i].Q[i] 当当前走的边不是GPS认为的最短路上的边就会被警告 即两个GPS都不认为是最短路上 ...
- mac 卸载编辑器卸不干净
Configuration ~/Library/Preferences/ Caches ~/Library/Caches/ Plugins ~/Library/Application Support/ ...