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 相关文章推荐
js模拟点击事件实现代码
Nov 06 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
Jul 10 Javascript
前台js对象在后台转化java对象的问题探讨
Dec 20 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
jquery实现的下拉和收缩效果示例
Aug 21 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
AngularJS 最常用的八种功能(基础知识)
Jun 26 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
JS访问对象两种方式区别解析
Aug 29 Javascript
vant中的toast层级改变操作
Nov 04 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python tornado修改log输出方式
2019/11/18 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
python xlsxwriter模块的使用
2020/12/24 Python
个人优缺点自我评价
2014/01/27 职场文书
会计工作态度自我评价
2015/03/06 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
学生犯错保证书
2015/05/09 职场文书
六一亲子活动感想
2015/08/07 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript