前端开发中经常会碰到图片上传的问题,网上的解决办法很多,可是有些图片上传的插件会有一些附属的插件,因此因为一个图片上传的问题可能额需要引入其他插件到项目中,久而久之项目会不伦不类,有时候插件之间也会有一些冲突,所以我们可以自己写一个图片上传的方法。

今天的demo是帮朋友做的一个移动端微信公众号项目,项目架构采用angular+ionic,因为对dom的操作jQuery会方便很多,但是jQuery比较厚重,所以最后选择用轻量级的zepto来对项目dom进行操作。
项目中有一个需求是上传个人作品,实现功能需要H5新对象 FormData对象、XMLHttpRequest对象、FileReader对象。只需要这三个对象即可,话不多说上代码。
dom结构:
js结构:
function1:
$scope.imgList = [];
$scope.setUploader = function () {
var files = document.getElementById('photo');
files.click();
$(files).unbind().on('change',function (e) {
var file = e.target.value;
if (!/.(jpg|jpeg|png|GIF|JPG|png)$/.test(file)) {
common.toast('图片类型必须是jpeg,jpg,png中的一种');
return false;
};
fsubmit();
readAsBinaryString();
});
};
function2:
function fsubmit() {
var itemImg = {};
var form=document.getElementById("form1");
console.log('form',form)
var formData=new FormData(form);
formData.append('wxdesigner_sid',$.fn.cookie('wxdesigner_sid'));
formData.append('id',$scope.masterInfo.id);
formData.append('pc','1');
var oReq = new XMLHttpRequest();
oReq.onreadystatechange=function(){
if(oReq.readyState==4){
if(oReq.status==200){
var json=JSON.parse(oReq.responseText);
console.log(json)
if(json.Success) {
itemImg = json.Data;
$scope.imgList=itemImg;
console.log($scope.imgList)
$scope.$apply();
itemImg = {};
}
}
}
};
console.log(oReq)
console.log(formData)
oReq.open("POST", common.api+"Wxdesigner/Designer/uploadworks");
oReq.send(formData);
return false;
};
//判断浏览器是否支持FileReader接口
if(typeof FileReader == 'undefined'){
//使选择控件不可操作
file.setAttribute("disabled","disabled");
}
function3:
function readAsBinaryString(){
var file = document.getElementById('photo').files[0];
console.log(file)
var reader = new FileReader();
//将文件以二进制形式读入页面
reader.readAsDataURL(file);
reader.onload=function(f){
$scope.masterInfo.thumblist.push(f.currentTarget.result)
console.log($scope.masterInfo)
$scope.$apply()
}
}
整个图片上传的dom层很简单,一个form表单加上一个触发表单的函数(function1)。在function1中获取到<input type="file">的点击事件,在选择图片的时候会做个判断,如果超出支持的图片类型围的时候做个提醒。
然后在后面调用function2和function3。
在function2中获取form表单对象,然后创建一个FormData对象,将获取到的form表单传入FormData,然后append一些上传图片的参数。再创建一个new XMLHttpRequest对象,然后open发送XHR请求接口,send(formData)传递参数给接口。
到这个时候接口发送成功。
这里的四个参数是formData中的四个参数
接口相应成功。
到这里有问题,图片上传成功写入数据库了,可是这时候需要在本地展示给用户看但是网页又不能直接访问设备本地的图片,因此我们需要FIleReader对象来对上传的图片文件读取为DataURL来展示在本地。
首先New 一个FileReader对象,然后将获取到的input file对象传入FileReader的 readAsDataURL()方法,此方法是将文件读取为DataURL的。
然后调用FileReader的onload方法,此方法的result会有转换之后的url,因此我们可以获取到此url,实际上是经过base64编码的。然后push到图片列表的最后
到此解决了问题,前端展示了本地的图片并且图片也写入了数据库,当页面再次刷新的时候拿到的是数据库中的数据
当然这里只是一个方法,移动端图片上传的插件比比皆是,甚至各种拖拽上传的图片上传插件也很多,此处适合项目中不用引入插件的图片上传的简单功能。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angularJS
# Ionic
# 图片上传
# 上传
# javascript实现移动端 HTML5 图片上传预览和压缩功能示例
# js移动端图片压缩上传功能
# JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
# Vue.js 2.0 移动端拍照压缩图片预览及上传实例
# Vue.js 2.0 移动端拍照压缩图片上传预览功能
# javascript html5移动端轻松实现文件上传
# javascript实现移动端上传图片功能
# 表单
# 会有
# 我们可以
# 做个
# 到此
# 的是
# 也会
# 不多
# 中有
# 很简单
# 不伦不类
# 这个时候
# 只需要
# 又不
# 比比皆是
# 在后面
# 只是一个
# 久而久之
相关文章:
制作销售网站教学视频,销售网站有哪些?
建站之星展会模板:智能建站与自助搭建高效解决方案
在线制作视频的网站有哪些,电脑如何制作视频短片?
视频网站制作教程,怎么样制作优酷网的小视频?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何获取上海专业网站定制建站电话?
专业商城网站制作公司有哪些,pi商城官网是哪个?
宝塔建站无法访问?如何排查配置与端口问题?
香港服务器选型指南:免备案配置与高效建站方案解析
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何续费美橙建站之星域名及服务?
C++时间戳转换成日期时间的步骤和示例代码
制作企业网站建设方案,怎样建设一个公司网站?
香港网站服务器数量如何影响SEO优化效果?
制作营销网站公司,淘特是干什么用的?
西安大型网站制作公司,西安招聘网站最好的是哪个?
建站之星如何实现网站加密操作?
如何通过智能用户系统一键生成高效建站方案?
广州建站公司哪家好?十大优质服务商推荐
网页设计网站制作软件,microsoft office哪个可以创建网页?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
个人摄影网站制作流程,摄影爱好者都去什么网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
建站之星如何配置系统实现高效建站?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
制作表格网站有哪些,线上表格怎么弄?
建站之星24小时客服电话如何获取?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何选择美橙互联多站合一建站方案?
XML的“混合内容”是什么 怎么用DTD或XSD定义
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
网站制作员失业,怎样查看自己网站的注册者?
如何快速搭建FTP站点实现文件共享?
如何在自有机房高效搭建专业网站?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何通过云梦建站系统实现SEO快速优化?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。