文件上传之普通上传

前言

记得去年十月份离开基础邮箱项目组,进入云邮局项目组之后,领导曾经嘱咐我将邮箱的上传模块整理成文档,方便其他同事接手。由于各方面原因迟迟未动手,最近终于下定决心,整理自己的笔记,记录邮箱用到的所有上传方式。大概包括:普通上传、139邮箱小工具上传、Flash上传、HTML5上传(含拖拽上传,分块上传,断点续传,妙传等功能)

普通上传流程如下:

一、应用场景:

单个小文件无需显示上传进度可采用普通上传

二、实现效果:

无刷新上传文件

三、操作步骤:

步骤一、美化原生的input type=‘file‘

早期的浏览器要求必须点击input type=‘file‘才能弹出文件选择框(很多现代浏览器支持为任意dom元素绑定单击事件,在事件处理程序中调用input type=‘file‘的click事件弹出文件选择框),但是默认的input很丑,我们可以做一个漂亮的上传按钮,然后将input type=‘file‘做成透明的浮层,悬浮在漂亮的上传按钮上,这样用户单击上传按钮实际单击的是input,可兼容所有浏览器,成功弹出文件选择框。

步骤二、准备HTML代码

<form target="_hideFrame_" enctype="multipart/form-data" method="post" action="http://appmail.mail.10086.cn/RmWeb/mail?func=attach:upload&sid=MTQwNzkzNDE2MDAwMTk2NTcwMTUzMQAA000005&composeId=0.5352626114618033&type=internal">
<input style="font-size:20px;position:absolute;right:0px;" type="file" name="uploadInput" id="uploadInput">
</form> 

<iframe name="_hideFrame_" style="display:none"></iframe>

步骤三、准备脚本

var commoUpload = {
    // 步骤一、为type=‘file‘绑定onchange事件,change事件触发时提交表单,表单的target属性指向一个隐藏的iframe
    initEvents : function() {
        var This = this;

        $("input").change(function() {
            if (!this.value) {
                return;
            }

            // 验证文件
            var extName = This.getFileExtName(this.value);
            if ($.inArray(extName, ["jpg", "jpeg", "gif", "bmp", "png"]) == -1) {
                alert("只允许插入jpg,jpeg,gif,bmp,png格式的图片");
                form.reset();
                return;
            }

            var form = this.form;
            var jFrame = This.getHideFrame();
            try {
                form.submit();
                form.reset();  // 千万不要忘了调用reset方法,不然第二次选择文件时无法触发change事件
            } catch(e) {
                jFrame.attr("src", "/m2012/html/blank.html").load(function() {
                    jFrame.unbind("load", arguments.callee);
                    form.submit();
                    form.reset();
                });
            }
        });
    },
    // 步骤二、创建隐藏的iframe并绑定onload事件,load事件触发时读取服务端输出的上传结果
    getHideFrame : function() {
        var This = this;
        var jFrame = $("#_hideFrame_");
        if (jFrame.length == 0) {
            jFrame = $(‘<iframe name="_hideFrame_" style="display:none"></iframe>‘).appendTo(document.body).load(function() {
                This.onUploadFrameLoad(this);
            });
        }
        return jFrame;
    },
    // 步骤三、解析上传结果,获取文件路径,文件大小等信息 用于满足回显图片等需求
    // 例如:139邮箱编辑器插入本地图片上传成功后服务端输出如下报文:
    // <script>document.domain=window.location.host.match(/[^.]+\.[^.]+$/)[0]; var return_obj={‘code‘:‘S_OK‘,‘var‘:{"fileId":"1639109220557duesgqlnrq1","fileName":"IMG_1388.JPG","fileSize":2183825}};</script>
    onUploadFrameLoad : function(frame) {
        try {
            var doc = frame.contentWindow.document;
            var html = doc.body.innerHTML || doc.documentElement.innerHTML;
            // TODO 解析上传成功后服务端的响应报文
        } catch(e) {
            console.log(‘Function:onUploadFrameLoad has a exception!‘);
        }
    },
    /**
    *获得小写的文件扩展名,不带.号
    *@returns {String}
    */
    getFileExtName: function (fileName) {
        if (fileName && fileName.indexOf(".") > -1) {
            return fileName.split(".").pop().toLowerCase();
        }
        return "";
    }
};

文件上传之普通上传,布布扣,bubuko.com

时间: 2024-12-26 01:40:55

文件上传之普通上传的相关文章

一个项目中哪些文件是要上传到 git上的,哪些是不必要的

经过测试发现除了上面图中的代码,其他的都是要上传到git上的 , .project文件是一个很关键的文件

Uploadify上传,可以上传多个文件,带有进度条,希望有所帮助!

原文:Uploadify上传,可以上传多个文件,带有进度条,希望有所帮助! 源代码下载:http://www.zuidaima.com/share/1550463502568448.htm 上传前 上传后 

linux上很方便的上传下载文件工具rz和sz使用介绍

简单说就是,可以很方便地用这两个sz/rz工具,实现Linux下和Windows之间的文件传输(发送和接收),速度大概为10KB/s,适合中小文件.rz/sz 通过Zmodem协议传输数据 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地: 与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地机器 rz:运行该命令会弹出一个文件

asp 文件上传(ASPUpload组件上传)

要实现该功能,就要利用一些特制的文件上传组件.文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件 1 下载和安装ASPUpload  要实现该功能,就要利用一些特制的文件上传组件.文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件,它的下载网址是:           http://www.persits.com/aspupload.exe       组件提供者网址是:           http://www.aspupload.com        

利用nodejs监控文件变化并使用sftp上传到服务器

很久没写博客了,因为最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不胜其烦,索性搜索了下,直接写个能检测文件变化并自动进行上传的脚本好了. 首先,我们使用npm 安装两个别人封装好的模块. npm install ssh2-sftp-client npm install gaze 第一个模块的作用是sftp上传文件, 第二个模块的作用就是监听文件变化了.当然,你也可

文件上传利器JQuery上传插件Uploadify

在做日常项目中,经常在后台需要上传图片等资源文件,之前使用过几次这个组件,感觉非常好用 ,但是每次使用的时候都是需要经过一番查阅,所以还不如记住在这里,以后使用的时候就翻翻. 他的官方网站如下:http://www.uploadify.com/ 插件下载地址:http://www.uploadify.com/download 说明文档:http://www.uploadify.com/documentation 在此之前,先说明下插件使用流程,该插件是基于jQuery的,所以我们在使用之前需要引

ajaxfileupload.js插件结合一般处理文件实现Ajax无刷新上传

先上几张图更直观展示一下要实现的功能.本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2.0实现数据读取.这个功能在实际工作种经经常使用到,希望能给须要做这方面的人有些帮助. 一.功能页面布局及介绍 1.上传页面布局及input file上传功能 2.上传页面文件正在上传效果 3.上传完毕效果,多文件展示区 二.功能代码实现及资源引用 1.js资源文件引用 html页面js引用.须要引

[转]文件上传原理:Web上传文件的原理及实现

现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的CommonsFileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2在底层也使用了CommonsFileUpload).在asp.net中也有相应的上传文件的控件. 虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理.在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件

input file 文件上传,js控制上传文件的大小和格式

文件上传一般是用jquery的uploadify,比较好用.后面会出文章介绍uploadify这个插件. 但是,有时候为了偷懒,直接就用input 的file进行文件和图片等的上传,input file 可以控制上传的格式,但是是html5,很多浏览器不支持,请看我的文章对input file上传类型的控制. 下面我用javascript来控制文件上传的大小和类型. 贴出html代码: <form action="后端接口" enctype="multipart/for