html5 图片上传版本1.0

1、代码如下:

/*
    autor:shzihouyu
    date:2015-12-11
    ver:1.0
*/
var szyFile = {
    fileDom:null,//html 文件上传控件
    preview:null,//图片预览的区域
    imgMaxSize:0,//图片大小
    filterDom:[],//符合条件的元素
    filterImgDataUrl:[],//图片的dataUrl数据
    dragArea:null,//拖放区域
    imgRegExp:function(f){
        if(!/\.(jpg|jpeg|tmp|png|gif)$/i.test(f.name)){
            alert(‘您上传的不是图片,请重新选择后上传!‘);
            return false;
        }
        return true;
    },
    isSupport:function(){//浏览器支持情况
        if(window.File && window.FileReader && window.FileList && window.Blob) {
            return true;
        } else {
           return false;
        }
    },
    select:function(e){//图片上传触发
        var e = e || window.event;
        var files = e.target.files || e.dataTransfer.files;
        for(var i = 0, f; f = files[i]; i++){
            if(f){
                if(szyFile.imgRegExp(f)){
                    if(f.size > szyFile.imgMaxSize*1024){
                        alert(‘图片过大,您上传的图片大于‘+szyFile.imgMaxSize+‘KB‘);
                        return false;
                    }else{
                        szyFile.filterDom.push(f);
                        var reader = new FileReader();
                        reader.onload = (function(){
                            return function(e){
                                szyFile.preview.innerHTML = ‘<img src="‘+ this.result +‘"/>‘;
                                szyFile.filterImgDataUrl.push(encodeURIComponent(this.result));
                            };
                        })(f);
                        reader.readAsDataURL(f);
                    }
                }
            }
        }
    },
    dropHandler:function(e){//拖放处理
        e.stopPropagation();
        e.preventDefault();
        szyFile.select(e);
    },
    dragOverHandler:function(e){//拖放效果处理
        e.stopPropagation();
        e.preventDefault();
        e.dataTransfer.dragEffect = ‘copy‘;
    },
    addDragArea:function(dom){//添加拖放区域
        this.dragArea = dom;
    },
    getDataUrl:function(){//返回所有上传图片的列表
        return this.filterImgDataUrl;
    },
    getLastDataUrl:function(){//返回最后一个上传的图片
        return this.filterImgDataUrl[this.filterImgDataUrl.length-1];
    },
    getFileList:function(){//返回文件列表
        return this.filterDom;
    },
    getFileLast:function(){//返回最后一个文件
        return this.filterDom[this.filterDom.length-1];
    },
    fileOnchange:function(elm){//事件添加
        elm.addEventListener(‘change‘, this.select, false);
    },
    fileValue:function(){//返回文件的value值
        return this.fileDom.value;
    },
    init:function(dom,prev,maxL,dragFlg,dragDom){//file控件 预览区域 图片最大尺寸 是否支持拖拽  拖拽区域
        if(dom) this.fileDom = dom;
        if(prev) this.preview = prev;
        if(maxL) this.imgMaxSize = maxL;
        if(this.isSupport()){
            this.fileOnchange(dom);
            if(dragFlg){
                if(dragDom){
                    this.dragArea = dragDom;
                    this.dragArea.addEventListener(‘drop‘, this.dropHandler, false);
                    this.dragArea.addEventListener(‘dragover‘, this.dragOverHandler, false);
                }
            }
        }else{
            alert(‘请先升级您的浏览器!‘);
        }
    }
}

2、用法如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分段读取文件</title>
</head>
<body>
    <input type="file" id="file"/>
    <div class="prevw">

    </div>
    <div id="drag_area" style="width:300px;height:160px;text-align:center;font-size:20px;color:#333;padding-top:140px;border:4px solid #000;">
        <span>把文件拖放到此处上传</span>
    </div>
</body>
</html>

<script src="szyH5File.js"></script>
<script type="text/javascript">
    var dom = document.querySelector(‘#file‘);
    var prev = document.querySelector(‘.prevw‘);
    var drag = document.querySelector(‘#drag_area‘);
    szyFile.init(dom,prev,500,true,drag);
</script>
时间: 2024-10-07 19:30:08

html5 图片上传版本1.0的相关文章

html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

原文:html5 图片上传,支持图片预览.压缩.及进度显示,兼容IE6+及标准浏览器 以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上传组件添加了单独的图片上传UI,支持图片预览和缩放(通过调整图片的大小以实现图片压缩). 上传组件特点 轻量级,不依赖任何JS库,核心代码(Q.Uploader.js)仅约700行,min版本加起来不到12KB 纯

Jquery插件-Html5图片上传并裁剪

/** * 图片裁剪 * @author yanglizhe * 2015/11/16 */ (function($){ /** * Drag */ var Drag={obj:null,init:function(elementHeader,element){elementHeader.onmousedown=Drag.start;elementHeader.obj=element;if(isNaN(parseInt(element.style.left))){element.style.le

html5图片上传使用FileReader预览

通过FileReader,和es6的方法解构赋值,promise对象简单封装上传预览 具体逻辑:选中图片之后,触发onchange方法,获得上传文件对象,调用fileReader方法验证图片是否符合上传需求,符合返回图片文本,不符合返回错误信息. 先介绍几个技术点,没接触过的朋友,可以先看看: Promise对象:是异步编程的一种解决方案,里面保存着某个未来才会结束的事件的结果.Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理.技术连接:http://es6.ruany

html5图片上传(搬砖)

参考: http://www.zhangxinxu.com/wordpress/2011/09/%E5%9F%BA%E4%BA%8Ehtml5%E7%9A%84%E5%8F%AF%E9%A2%84%E8%A7%88%E5%A4%9A%E5%9B%BE%E7%89%87ajax%E4%B8%8A%E4%BC%A0/ js文件: /** * Created by joesbell on 2016/10/21. */ /**/ var ZXXFILE = { fileInput: null, //ht

HTML5图片上传预览

HTML5实现图片的上传预览,需要使用FileReader对象. FileReader: The FileReader object lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. 也就

基于jQuery仿uploadify的HTML5图片上传控件jquery.html5uploader

(function($){ var methods = { init:function(options){ return this.each(function(){ var $this = $(this); var $clone = $this.clone(); var settings = $.extend({ id : $this.attr('id'), button:$this, uploader : '', formData:{}, auto : true, fileTypes : '*

html5图片上传时IOS和Android均显示摄像头拍照和图片选择

最近在做信开发时,发现<input type="file" />在IOS中可以拍照或从照片图库选择,而Android系统则显示资源管理器,无拍照选项,网上查找资料,改为<input type="file" capture="camera">后,Android可显示相机和文档,但IOS则只有拍照选项了,最后通过判断设备类型使在IOS和Android下均可以显示拍照和图库选择,代码如下: var u = navigator.u

MVC4中基于bootstrap和HTML5的图片上传Jquery自定义控件

场景:mvc4中上传图片,批量上传,上传前浏览,操作.图片进度条. 解决:自定义jquery控件 没有解决:非图片上传时,会有浏览样式的问题; 解决方案; 1.样式 – bootstrap 的css和图标与metro-ui-css的部分css 2.js 自定义控件 3.后台 mvc4 ------------------------------------------------- 1. [class*=border-color] { border: 2px solid; } .border-c

HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的整理思路,写到博客里还能做个备忘. 1) 跨域通讯 现在做企业项目,前端很不自然的会大量使用iframe标签,我以前在文章里提到iframe是一个效率极其低下的标签,但是如果项目没有什么性能的苛求,使用iframe还是非常的方便的. 使用iframe经常碰到父子窗体通讯的问题,我们看看下面的代码: