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 相关文章推荐
javaScript如何处理从java后台返回的list
Apr 24 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
JS实现的不规则TAB选项卡效果代码
Sep 18 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
jQuery验证表单格式的使用方法
Jan 10 Javascript
Angular+Node生成随机数的方法
Jun 16 Javascript
vue项目中axios请求网络接口封装的示例代码
Dec 18 Javascript
koa2 从入门到精通(小结)
Jul 23 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
Oct 29 Javascript
JS+CSS实现过渡特效
Jan 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
url decode problem 解决方法
2011/12/26 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
JS模块与命名空间的介绍
2013/03/22 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
Python过滤列表用法实例分析
2016/04/29 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python下载库的步骤方法
2019/10/12 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
简单了解django文件下载方式
2020/02/10 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
关于Java String的一道面试题
2013/09/29 面试题
医院护士的求职信
2014/01/03 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
2016春节家属慰问信
2015/03/25 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL