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 相关文章推荐
推荐10个超棒的jQuery工具提示插件
Oct 11 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 Javascript
利用jquery获取select下拉框的值
Nov 23 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
jquery Form轻松实现文件上传
May 24 jQuery
vue实现输入框自动跳转功能
May 20 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP面向对象概念
2011/11/06 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
Python3实现的简单工资管理系统示例
2019/03/12 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
高中生期末评语大全
2014/01/28 职场文书
委托公证书范本
2014/04/03 职场文书
五好家庭申报材料
2014/12/20 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
实施意见格式范本
2015/06/05 职场文书
《花钟》教学反思
2016/02/17 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技