博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动端通过ajax上传图片(文件)并在前台展示——通过H5的FormData对象
阅读量:5992 次
发布时间:2019-06-20

本文共 2174 字,大约阅读时间需要 7 分钟。

前些时候遇到移动端需要上传图片和视频的问题,之前一直通过ajax异步的提交数据,所以在寻找通过ajax上传文件的方法。发现了H5里新增了一个FormData对象,通过这个对象可以直接绑定html中的form元素,然后通过ajax提交的时候直接提交这个对象就好了。

 

 在移动端调用视频和音频:

     //调用相册和摄像头  //视频  //音频

 

以上传图片为例

html中的代码:

当然如果你想要上传多张图片也是可以的,只要加上“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:

js:

var formTest = document.getElementById("formTest");var form = new FormData(formTest);

这样会自动获取到form表单中name和value并添加到formdata对象里

 

通常我们在传入图片后,会想让图片在前台页面展示,这里我们要用到H5的FileReader。

我的做法是:前端放一张图片,点击图片的时候触发隐藏的上传文件的input,input改变时调用prewviewImg方法

html:

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]);    }}

这样就可以显示图片的内容了

 

转载于:https://www.cnblogs.com/dealblog/p/7760554.html

你可能感兴趣的文章
Oracle一个中文汉字占用几个字节
查看>>
汇编开发环境
查看>>
git reset --hard 回滚以后 以后怎么再回去?
查看>>
【转】测试趋势之我的观点
查看>>
静态和动态链接
查看>>
500 OOPS: vsftpd: cannot locate user specified in 'chown_username':whoever
查看>>
解锁redis锁的正确姿势
查看>>
Kylin如何进行JDBC方式访问或者调用
查看>>
学习jQuery
查看>>
REST服务开发实战,互联网营销
查看>>
Cocos Creator JS web平台复制粘贴代码(亲测可用)
查看>>
ELF文件整体格式小结
查看>>
linux 下的 多线程http 下载器
查看>>
[转载]分享WCF聊天程序--WCFChat
查看>>
Win2008 Server系统安装打印服务器与配置
查看>>
JAX-RS开发 hello world
查看>>
题目:请实现一个函数,将一个字符串中的空格替换成“%20”
查看>>
shell 的语法
查看>>
第三章 logstash - 输入插件之tcp与redis
查看>>
C# 实现数字字符串左补齐0的两种方法
查看>>