移动端HTML5实现文件上传功能【附代码】


Posted in HTML / CSS onMarch 25, 2016

PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。

用的技术主要是:

ajax
FileReader
FormData

HTML结构:

JavaScript Code复制内容到剪贴板
  1. <div class="camera-area">   
  2.       <form enctype="multipart/form-data" method="post">   
  3.         <input type="file" name="fileToUpload" class="fileToUpload" accept="image/*" capture="camera"/>   
  4.           <div class="upload-progress"><span></span></div>   
  5.         </form>   
  6.       <div class="thumb"></div>   
  7.   </div>  

已经封装好的upload.js,依赖zepto

JavaScript Code复制内容到剪贴板
  1. (function($) {   
  2.   $.extend($.fn, {   
  3.     fileUpload: function(opts) {   
  4.       this.each(function() {   
  5.         var $self = $(this);   
  6.         var doms = {   
  7.           "fileToUpload": $self.find(".fileToUpload"),   
  8.           "thumb": $self.find(".thumb"),   
  9.           "progress": $self.find(".upload-progress")   
  10.         };   
  11.         var funs = {   
  12.           //选择文件,获取文件大小,也可以在这里获取文件格式,限制用户上传非要求格式的文件   
  13.           "fileSelected"function() {   
  14.             var files = (doms.fileToUpload)[0].files;   
  15.             var count = files.length;   
  16.             for (var index = 0; index < count; index++) {   
  17.               var file = files[index];   
  18.               var fileSize = 0;   
  19.               if (file.size > 1024 * 1024)   
  20.                 fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';   
  21.               else  
  22.                 fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';   
  23.             }   
  24.             funs.uploadFile();   
  25.           },   
  26.           //异步上传文件   
  27.           uploadFile: function() {   
  28.             var fd = new FormData();//创建表单数据对象   
  29.             var files = (doms.fileToUpload)[0].files;   
  30.             var count = files.length;   
  31.             for (var index = 0; index < count; index++) {   
  32.               var file = files[index];   
  33.               fd.append(opts.file, file);//将文件添加到表单数据中   
  34.               funs.previewImage(file);//上传前预览图片,也可以通过其他方法预览txt   
  35.             }   
  36.             var xhr = new XMLHttpRequest();   
  37.             xhr.upload.addEventListener("progress", funs.uploadProgress, false);//监听上传进度   
  38.             xhr.addEventListener("load", funs.uploadComplete, false);   
  39.             xhr.addEventListener("error", opts.uploadFailed, false);   
  40.             xhr.open("POST", opts.url);   
  41.             xhr.send(fd);   
  42.           },   
  43.           //文件预览   
  44.           previewImage: function(file) {   
  45.             var gallery = doms.thumb;   
  46.             var img = document.createElement("img");   
  47.             img.file = file;   
  48.             doms.thumb.html(img);   
  49.             // 使用FileReader方法显示图片内容   
  50.             var reader = new FileReader();   
  51.             reader.onload = (function(aImg) {   
  52.               return function(e) {   
  53.                 aImg.src = e.target.result;   
  54.               };   
  55.             })(img);   
  56.             reader.readAsDataURL(file);   
  57.           },   
  58.           uploadProgress: function(evt) {   
  59.             if (evt.lengthComputable) {   
  60.               var percentComplete = Math.round(evt.loaded * 100 / evt.total);   
  61.               doms.progress.html(percentComplete.toString() + '%');   
  62.             }   
  63.           },   
  64.           "uploadComplete"function(evt) {   
  65.             alert(evt.target.responseText)   
  66.           }   
  67.         };   
  68.         doms.fileToUpload.on("change"function() {   
  69.           doms.progress.find("span").width("0");   
  70.           funs.fileSelected();   
  71.         });   
  72.       });   
  73.     }   
  74.   });   
  75. })(Zepto);  

调用方法:

JavaScript Code复制内容到剪贴板
  1. $(".camera-area").fileUpload({   
  2.         "url""savetofile.php",   
  3.         "file""myFile"  
  4.       });  

PHP部分:

PHP Code复制内容到剪贴板
  1. <?php   
  2. if (isset($_FILES['myFile'])) {   
  3.     // Example:   
  4.     writeLog($_FILES);   
  5.     move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']);   
  6.     echo 'successful';   
  7. }   
  8. function writeLog($log){   
  9.     if(is_array($log) || is_object($log)){   
  10.         $log = json_encode($log);   
  11.     }   
  12.     $log = $log."\r\n";   
  13.   
  14.     file_put_contents('log.log'$log,FILE_APPEND);   
  15. }   
  16. ?>  

点击这里下载源码

以上这篇移动端HTML5实现文件上传功能【附代码】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

原文地址:http://www.cnblogs.com/hutuzhu/p/5254532.html

HTML / CSS 相关文章推荐
css3 border-image使用说明
Jun 23 HTML / CSS
纯css3无js实现的Android Logo(有简单动画)
Jan 21 HTML / CSS
纯CSS3实现圆角效果(含IE兼容解决方法)
May 07 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
Jan 03 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
Apr 25 HTML / CSS
浅析CSS3 用text-overflow解决文字排版问题
Oct 28 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
Jul 06 HTML / CSS
html5 兼容IE6结构的实现代码
May 14 HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
Jan 09 HTML / CSS
使用phonegap进行提示操作的具体方法
Mar 30 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
Apr 27 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
Nov 10 HTML / CSS
HTML5触摸事件演化tap事件介绍
Mar 25 #HTML / CSS
html5生成柱状图(条形图)效果的实例代码
Mar 25 #HTML / CSS
用html5绘制折线图的实例代码
Mar 25 #HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
Mar 25 #HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
Mar 25 #HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
Mar 25 #HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
Mar 24 #HTML / CSS
You might like
php函数的常用方法及注意之处小结
2011/07/10 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
vue实现搜索功能
2019/05/28 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python读取几个G的csv文件方法
2019/01/07 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
创业计划书如何吸引他人眼球
2014/01/10 职场文书
网站美工岗位职责
2014/04/02 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
学籍证明模板
2014/11/21 职场文书