移动端通过ajax上传图片(文件)并在前台展示——通过H5的FormData对象
前些时候遇到移动端需要上传图片和视频的问题,之前一直通过ajax异步的提交数据,所以在寻找通过ajax上传文件的方法。发现了H5里新增了一个FormData对象,通过这个对象可以直接绑定html中的form元素,然后通过ajax提交的时候直接提交这个对象就好了。
在移动端调用视频和音频:
<input type="file" accept="image/*" capture="camera"> //调用相册和摄像头
<input type="file" accept="video/*" capture="camcorder"> //视频
<input type="file" accept="audio/*" capture="microphone"> //音频
以上传图片为例
html中的代码:
<input type="file" id="file" name="file" accept="image/*" />
当然如果你想要上传多张图片也是可以的,只要加上“multiple”属性
<input type="file" id="file" name="file" accept="image/*" multiple />
(其实只需要写上type和id就可以了)
我们可以通过打印台看到传到的里面的内容
var file = document.getElementById("file");
console.log(file.files);
得到的是一个类似于一个数组的泛类集合,我们可以像取数组一样取到第i个:file.files[i]

在JS中,我们需要先new一个FormData对象
var form = new FormData();
然后把我们传完的图片添加到这个FormData对象中去,这里用到append
form.append("fileImg",file.files);
然后我们就可以通过ajax向后台传递数据了,我习惯用的jquery的ajax
$.ajax({
type: "post",
url: "传输的地址",
data: form,
contentType: false, // 注意这里应设为false
processData: false, //false
cache: false, //缓存
success: function(data){
console.log(data);
}
})
注意:里面设为false的三个参数:
contentType:发送信息至服务器时内容编码类型,默认是application/x-www-form-urlencoded
processData:默认会把data的数据转为字符串
cache:设置为 false 将不缓存此页面
这里如果是跨域传输的话会出现问题,传文件时是不能设置dataType:"jsonp"的,会出现问题,想要跨域的话尽量不要使用这个方法(是我比较菜还不会传,手动捂脸,欢迎指导),当然通过后台设置允许访问的地址也可以
FormData对象是封闭的,没有办法通过console.log(form)打印到打印台,想要查看form对象里的值可以通过浏览器调试工具的Network里查看
通常我们传递数据当然不是只传文件,因此我们需要把要传的每一条都append到FormData里。
我们可以在html中加一个form表单并获取到它的id,然后form表单中的数据可以直接绑到FormData里
html:
<form id="formTest">
<input type="text" name="name1" />
<input type="text" name="name2"/>
<input type="file" name="file" id="file"/>
</form>
js:
var formTest = document.getElementById("formTest");
var form = new FormData(formTest);
这样会自动获取到form表单中name和value并添加到formdata对象里
通常我们在传入图片后,会想让图片在前台页面展示,这里我们要用到H5的FileReader。
我的做法是:前端放一张图片,点击图片的时候触发隐藏的上传文件的input,input改变时调用prewviewImg方法
html:
<div class="pic" id="wholeImg"><img id="img1" src="img/a11.png"/></div>
<input type="file" name="whole" id="whole" style="display: none;" capture="camera" onchange="previewImg(this)" />
js:
$("#wholeImg").click(function(){
$("#whole").click();
})
function previewImg(file){
//判断是否支持FileReader
if (window.FileReader) {
var reader = new FileReader();
} else {
alert("您的设备不支持图片预览功能,如需该功能请升级您的设备!");
}
var preDiv = document.getElementById("wholeImg");
//获取图片
if (file.files && file.files[0]){
var reader = new FileReader();
reader.onload = function(e){
var img = document.getElementById("img1");
img.setAttribute("src",e.target.result);
}
reader.readAsDataURL(file.files[0]);
}
}
这样就可以显示图片的内容了
移动端通过ajax上传图片(文件)并在前台展示——通过H5的FormData对象的更多相关文章
- ajax上传图片文件
这里用的是一个隐藏的iframe,这样可以让form表单提交到这个iframe里面,用户就看不到页面的刷新了 前段时间在解决ajax上传文件时折腾了好一阵.直接用$.post上传文本信息肯定是没有问题 ...
- vuejs使用FormData对象,ajax上传图片文件
我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用ajax能够无刷新上传图片等文件. ...
- H5的FormData对象完成ajax上传文件multiFile
最近工作中需要完成,ajax上传图片,可是input file +ajax是无法完成的: 于是寻找了许久,发现了H5 的一个对象FormData 使用方法如下: HTML: <form id=& ...
- Ajax上传图片以及上传之前先预览
手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成.在文件上传的时候用到了Ajax上传文件,以及图片在上传之前的预览效果 ...
- [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)
通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上 ...
- .Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径
前言: 首先对于图片上传而言,在我们的项目开发中可以说出现的频率是相当的高的.这篇文章中,我将要描述的是在我们.Net中如何使用Jquery Ajax通过FormData对象异步提交图片文件到后台保存 ...
- 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收
利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
- Jquer + Ajax 制作上传图片文件
没什么 说的 直接 上代码 //选择图片并上传 function selectImg(node){ var f = node.value; var file = node.files[0]; if( ...
- asp.net core 通过ajax上传图片及wangEditor图片上传
asp.net core 通过ajax上传图片 .net core前端代码,因为是通过ajax调用,首先要保证ajax能调用后台代码,具体参见上一篇.net core 使用ajax调用后台代码. 前端 ...
随机推荐
- JSP第六篇【自定义标签之传统标签】
为什么要使用自定义标签? JSTL标签库只提供了简单的输出等功能,没有实现任何的HTML代码封装,并且某些复杂类型转换,或者逻辑处理的时候,JSTL标签库完成不了,需要自定义标签! 编写自定义标签的步 ...
- python 集合的操作
list_1 = set([1,2,3,4,5])#print(list_1,type(list_1))list_2 = set([1,2,3,6,7,8,9,10])#print(list_2,ty ...
- centOS 6 服务管理与服务脚本
服务管理与服务脚本 linux服务 服务管理与服务脚本 linux服务 服务启动过程详解 chkconfig命令 非独立服务与xinetd进程 一个特殊的服务脚本 服务启动过程详解 在开机启动 ...
- Python循环列表删除元素问题
有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到, 比如以下代码 a=[1,2,3,4,5,6]print(a) for i in a: if i==3 or i== ...
- 【】小技巧】CSS文字两端对齐
需求如下,红框所在的文字有四个字的.三个字的.两个字的,如果不两端对齐可以选择居中对齐,或者右对齐.但是如果要像下面这样两端对齐呢? 我相信以前很多人都这么干过:两个字中间使用 来隔开达到四个字的宽度 ...
- 这是一名Java学者关于学习方向的建议
无可厚非,编程是一门艺术.但是辉煌的背后必须是一段辛苦的奋斗过程,而过程的引导方向就是最重要的一环.Java语言可谓是引领了编程的潮流,你会是怎样去学的呢? 这是一名Java学者的学习方向的建议 注: ...
- 阿里云服务器解决mysql远程连接失败问题
嗯,自己买了个阿里云的学生机服务器,奈何装了mysql以后一直不能连接,也是够笨的. 记录一下自己遇到的问题. 当然了,首先需要在阿里云安全组开放3306端口,第一次玩儿云服务器差点把我搞坏了.... ...
- AngularJS–Animations(动画)
点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 在AngularJS 1.3 中,给一些指令(eg: ngRepeat,ngSw ...
- Atlas框架介绍集成(一)
Atlas是什么? Atlas是一个Android客户端容器框架,主要提供了组件化.动态性.解耦化的支持.支持在编码期.Apk运行期以及后续运维修复期的各种问题. 在工程期,实现工程独立开发,调试功能 ...
- mint-ui vue双向绑定
由于最近项目需求,用上了mint-ui来重构移动端页面,从框架本身来讲我觉得很强大了,用起来也很不错,但是文档就真的是,,,,让我无言以对,给的api对于我们这些小菜鸟来讲真的是处处是坑呀(ps:用v ...