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 相关文章推荐
跟着JQuery API学Jquery 之二 属性
Apr 09 Javascript
javascript 运算数的求值顺序
Aug 23 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
Javascript中Array用法实例分析
Jun 13 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
基于JavaScript Array数组方法(新手必看篇)
Aug 20 Javascript
总结Javascript中的隐式类型转换
Aug 24 Javascript
js处理包含中文的字符串实例
Oct 11 Javascript
详解ES6通过WeakMap解决内存泄漏问题
Mar 09 Javascript
基于Vue 实现一个中规中矩loading组件
Apr 03 Javascript
原生JS无缝滑动轮播图
Oct 22 Javascript
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
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获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
详解redux异步操作实践
2018/08/15 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
python写日志封装类实例
2015/06/28 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python autoescape标签用法解析
2020/01/17 Python
超级实用的8个Python列表技巧
2020/08/24 Python
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
技术总监岗位职责
2013/12/05 职场文书
2014年环保局工作总结
2014/12/11 职场文书
Python图片检索之以图搜图
2021/05/31 Python
SQLServer之常用函数总结详解
2021/08/30 SQL Server
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python