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请求参数为文件类型的更多相关文章

  1. SSM框架下,使用ajax请求上传文件(doc\docx\excel\图片等)

    1.准备工作 1.1.添加上传必要jar包 <dependency> <groupId>commons-io</groupId> <artifactId> ...

  2. JQuery Ajax 请求参数 List 集合处理

    引言 JQuery Ajax 发送请求参数一般都是基本类型,比如 String.int:那么,请求参数如果是 List 集合应该如何处理呢? 情况一:Aajx 发送 List 类型请求参数 举例如下: ...

  3. Ajax请求参数较长导致请求失败

    Ajax请求参数比较长,第5行参数大概1100个字符吧,是接口的请求报文. $.ajax({ type:"POST", url:"${ctx}/test.action?m ...

  4. Ajax请求参数到一个URL包含下划线或者v(_、v)

    Ajax请求参数到一个URL包含下划线或者v 初学者的我,在F12时,看到这个地址就会很奇怪,不理解什么东西 经过查找了解到浏览器默认开启缓存,该参数不是其他请求所必须的,把它去掉不影响数据的获取 h ...

  5. springmvc:请求参数绑定集合类型

    一.请求参数绑定实体类 domain: private String username; private String password; private Double money; private ...

  6. jquery ajax 请求参数详细说明 及 实例

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

  7. Ajax 请求下载 Execl 文件

    通过Ajax请求下载Execl 的问题,掉进一个坑里半个多小时,特此来记录一下 . 起初  我误以为是后台的问题,然而调试了一下并不是这样的,也不会报错,且进入了success 函数. 以下的事件及请 ...

  8. Ajax请求参数解释

    ajax常用的两个请求是get和post,而springmvc的控制层可以接收ajax请求. 但是这个过程非常灵活,变化很大,容易出错. $.ajax({ url : SITE_PATH + &quo ...

  9. ajax请求不能下载文件(转载)

    最近在做文件下载,后台写了个控制层,直接走进去应该就可以下载文件,各种文件图片,excel等 但是起初老是下载失败,并且弹出下面的乱码: 前台请求代码: $('#fileexcel').unbind( ...

随机推荐

  1. LCD驱动程序架构和分析

    一.LCD驱动程序架构 1.裸机驱动代码分析 ①LCD初始化:控制器初始化,端口初始化,指明帧缓冲 ②LCD图形显示:将图形数据写入帧缓冲 void lcd_init() { lcd_port_ini ...

  2. hdu 3572 Task Schedule (Dinic模板)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  3. LR之-参数化

    1.改变参数化主要在于select next now和update value on这个二个选项 sequential:顺序取值 random:随机取值 unique:唯一取值 same line a ...

  4. ROS录制主题和放

    1.按照指定名称录制指定主题, 如录制主题为line_markers,名称为line_extraction的bag包. rosbag record -O line_extraction.bag /li ...

  5. 解决ios下部分手机在input设置为readonly属性时,依然显示光标

    解决ios下部分手机在input设置为readonly属性时,依然显示光标 在出现如上所说的问题是尝试给input 加上  onfocus="this.blur()"  方法 添加 ...

  6. 88、展示Tensorflow计算图上每个节点的基本信息以及运行时消耗的时间和空间

    ''' Created on May 24, 2017 @author: p0079482 ''' #使用程序输出日志 import tensorflow as tf with tf.Session( ...

  7. 在windows命令行下安装和使用babel(es6to5)

    在自己的目录下新建一个babel-test/目录 进入这个目录 1. 安装babel命令和转换库:      npm install babel-cli      npm install babel- ...

  8. Python List列表的操作说明

    Python中List的N种操作,其简单程度令人叹为观止... C:\Users\rhys>python Python 2.7.14 (v2.7.14:84471935ed, Sep 16 20 ...

  9. Django框架(二十五)—— Django rest_framework-路由控制与响应器

    路由控制与响应器 一.路由控制 # 1.基本路由: url(r'^publish/$', views.PublishView.as_view()), # 2.半自动路径:views.PublishVi ...

  10. zoom:1总结

    zoom:1确实帮我们解决了不少ie下的bug,但是它的来龙去脉,又有多少人知道呢? 所以我老生常谈,说一下它的来龙去脉. Zoom属性是IE浏览器的专有属性, 它可以设置或检索对象的缩放比例.先来一 ...