javascript html5移动端轻松实现文件上传


Posted in Javascript onMarch 27, 2020

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

用的技术主要是:

  • ajax
  • FileReader
  • FormData

HTML结构:

<div class="camera-area">
 <form enctype="multipart/form-data" method="post">
 <input type="file" name="fileToUpload" class="fileToUpload" accept="image/*" capture="camera"/>
 <div class="upload-progress"><span></span></div>
 </form>
 <div class="thumb"></div>
 </div>

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

(function($) {
 $.extend($.fn, {
 fileUpload: function(opts) {
 this.each(function() {
 var $self = $(this);
 var doms = {
 "fileToUpload": $self.find(".fileToUpload"),
 "thumb": $self.find(".thumb"),
 "progress": $self.find(".upload-progress")
 };
 var funs = {
 //选择文件,获取文件大小,也可以在这里获取文件格式,限制用户上传非要求格式的文件
 "fileSelected": function() {
 var files = (doms.fileToUpload)[0].files;
 var count = files.length;
 for (var index = 0; index < count; index++) {
 var file = files[index];
 var fileSize = 0;
 if (file.size > 1024 * 1024)
 fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
 else
 fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
 }
 funs.uploadFile();
 },
 //异步上传文件
 uploadFile: function() {
 var fd = new FormData();//创建表单数据对象
 var files = (doms.fileToUpload)[0].files;
 var count = files.length;
 for (var index = 0; index < count; index++) {
 var file = files[index];
 fd.append(opts.file, file);//将文件添加到表单数据中
 funs.previewImage(file);//上传前预览图片,也可以通过其他方法预览txt
 }
 var xhr = new XMLHttpRequest();
 xhr.upload.addEventListener("progress", funs.uploadProgress, false);//监听上传进度
 xhr.addEventListener("load", funs.uploadComplete, false);
 xhr.addEventListener("error", opts.uploadFailed, false);
 xhr.open("POST", opts.url);
 xhr.send(fd);
 },
 //文件预览
 previewImage: function(file) {
 var gallery = doms.thumb;
 var img = document.createElement("img");
 img.file = file;
 doms.thumb.html(img);
 // 使用FileReader方法显示图片内容
 var reader = new FileReader();
 reader.onload = (function(aImg) {
 return function(e) {
 aImg.src = e.target.result;
 };
 })(img);
 reader.readAsDataURL(file);
 },
 uploadProgress: function(evt) {
 if (evt.lengthComputable) {
 var percentComplete = Math.round(evt.loaded * 100 / evt.total);
 doms.progress.html(percentComplete.toString() + '%');
 }
 },
 "uploadComplete": function(evt) {
 alert(evt.target.responseText)
 }
 };
 doms.fileToUpload.on("change", function() {
 doms.progress.find("span").width("0");
 funs.fileSelected();
 });
 });
 }
 });
})(Zepto);

调用方法:

$(".camera-area").fileUpload({
 "url": "savetofile.php",
 "file": "myFile"
 });

PHP部分:

<?php
if (isset($_FILES['myFile'])) {
 // Example:
 writeLog($_FILES);
 move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']);
 echo 'successful';
}
function writeLog($log){
 if(is_array($log) || is_object($log)){
 $log = json_encode($log);
 }
 $log = $log."\r\n";

 file_put_contents('log.log', $log,FILE_APPEND);
}
?>

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

希望本文所述对大家学习有所帮助。

Javascript 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
Jun 09 Javascript
js+div实现图片滚动效果代码
Feb 10 Javascript
jquery插件开发之实现jquery手风琴功能分享
Mar 10 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
Oct 06 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
Jan 21 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
Typescript的三种运行方式(小结)
Sep 18 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 Javascript
javascript事件绑定学习要点
Mar 09 #Javascript
js实现分割上传大文件
Mar 09 #Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
Mar 09 #Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
Mar 08 #Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 #Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 #Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 #Javascript
You might like
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
详解python深浅拷贝区别
2019/06/24 Python
python操作cfg配置文件方式
2019/12/22 Python
python 连续不等式语法糖实例
2020/04/15 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
给公司的建议书范文
2014/05/13 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
Mysql 一主多从的部署
2022/05/20 MySQL