文件上传~Uploadify上传控件

对于文件上传来说,有很多种实现方式,如传统的表单方式,现在流行的flash方式,甚至还有纯JS方式,之所以有这些方式来实现文件上传,我想主要原因是因为,传统的上传对于大文件支持不够,因为它是单线程同步机制,当大文件通过HTTP方式发送到服务端时,对于服务端站点的主线程影响比较大,会产生阻塞,所以,现在很多上传控制都是异步,多线程的方式去实现的.

今天来介绍一个文件上传控制,它就是Uploadify,它应该是flash的异步上传工具,对于大文件支持还不错,所以,我选择了它.

相关API介绍

uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后淡出打开文件对话框,默认值:uploadify.swf。 
script :   后台处理程序的相对路径 。默认值:uploadify.php 
checkScript :用来判断上传选择的文件在服务器是否存在的后台处理程序的相对路径 
fileDataName :设置一个名字,在服务器处理程序中根据该名字来取上传文件的数据。默认为Filedata 
method : 提交方式Post 或Get 默认为Post 
scriptAccess :flash脚本文件的访问模式,如果在本地测试设置为always,默认值:sameDomain  
folder :  上传文件存放的目录 。 
queueID : 文件队列的ID,该ID与存放文件队列的div的ID一致。 
queueSizeLimit : 当允许多文件生成时,设置选择文件的个数,默认值:999 。 
multi : 设置为true时可以上传多个文件。 
auto : 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。

fileExt : 设置可以选择的文件的类型,格式如:'*.jpg;*.gif,*.png' 。

fileDesc : 这个属性值必须设置fileExt属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileDesc为“请选择图像文件”,
sizeLimit : 上传文件的大小限制 。 
simUploadLimit : 允许同时上传的个数 默认值:1 。 
buttonText : 浏览按钮的文本,默认值:BROWSE 。 
buttonImg : 浏览按钮的图片的路径 。 
hideButton : 设置为true则隐藏浏览按钮的图片 。 
rollover : 值为true和false,设置为true时当鼠标移到浏览按钮上时有反转效果。 
width : 设置浏览按钮的宽度 ,默认值:110。 
height : 设置浏览按钮的高度 ,默认值:30。 
wmode : 设置该项为transparent 可以使浏览按钮的flash背景文件透明,并且flash文件会被置为页面的最高层。 默认值:opaque 。 
cancelImg :选择文件到文件队列中后的每一个文件上的关闭按钮图标

结构图

HTML代码

<div>
    <div class="inputDiv fl">
        <input type="text" name="ImagePath" id="ImagePath" style="width: 600px;">
        <img style="display: none;" />
    </div>
    <div class="fl" style="position: relative;">
        <input id="custom_file_uploadEdu" type="file" class="btn" />
        <a href="javascript:$('#custom_file_uploadEdu').uploadifyUpload()">上传</a>|
      <a href="javascript:$('#custom_file_uploadEdu').uploadifyClearQueue()">取消上传</a>
    </div>
    <div id="displayMsg"></div>
</div>

JS代码

<script type="text/ecmascript">

    $("#custom_file_uploadEdu").uploadify({
        'uploader': '/Scripts/Uploadify/uploadify.swf',
        'script': '/ashx/UploadFile.ashx',
        'cancelImg': '/Scripts/Uploadify/uploadify-cancel.png',
        'folder': '/',
        'queueSizeLimit': 1,
        'simUploadLimit': 1,
        'sizeLimit ': 1024 * 1024 * 5,
        'multi': false,
        'auto': false,/*如果是自动上传,那上传按钮将没用了*/
        'fileExt': '*.jpg;*.gif;*.jpeg;*.mp4',
        'fileDesc': '请选择图像或者视频',
        'queueID': 'fileQueue',
        'width': 110,
        'height': 30,
        'buttonText': '选择',
        'wmode': 'opaque',
        'hideButton': false,
        'onSelect': function (event, ID, fileObj) {
            $("#displayMsg").html("上传中......");
        },
        'onComplete': function (event, queueId, fileObj, response, data) {
            var ary = response.split('|');
            if (ary[0] == "0") { //提示错误信息
                alert(ary[1]);
            }
            else {
                if (ary[0]=="1") {//上传后的URL
                    $("#displayMsg").html("上传成功")
                    $("#ImagePath").attr("value", ary[1]);
                    $("#ImagePath").remove("img").next("img").show().attr({ "style": "width:50px;height:50px;", "src": ary[1] });
                } else {//异常信息
                    alert(ary[1]);
                }
            }
        }
    });
</script>

后台处理程序(接收流,写入流)

namespace WebTest.ashx
{
    /// <summary>
    /// UploadFile 的摘要说明
    /// </summary>
    public class UploadFile : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            context.Response.Write(new UploadImpl().Upload(context, UpLoadType.ProductImage, false));

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

}

UploadImpl类代码

 View Code

效果图

本文转自博客园张占岭(仓储大叔)的博客,原文链接:文件上传~Uploadify上传控件,如需转载请自行联系原博主。

时间: 2024-07-28 16:19:54

文件上传~Uploadify上传控件的相关文章

文件上传~Uploadify上传控件~续(多文件上传)

对于Uploadify文件上传之前已经讲过一次(文件上传~Uploadify上传控件),只不过没有涉及到多文件的上传,这回主要说一下多个文件的上传,首先,我们要清楚一个概念,多文件上传前端Uploadify是通过轮训的方式去调用我们的后台upload程序的,所以,对于多文件上传来说,也没什么稀奇的. 下面是文件上传后的缩略图如下 列表的组装使用JS模板,这样对于复杂的HTML结构来说,可以减少拼写错误的出现,关闭是将LI元素从UI元素移除,最后提交时,从UI里检查LI元素,然后对它进行组装,并进

statusbar控件上加载进度条控件,怎么在按钮和进度条间切换呢?

问题描述 statusbar控件上加载进度条控件,怎么在按钮和进度条间切换呢? statusbar控件上加载进度条控件,当加载完成,进度条消失,显示按钮,再次加载的时候隐藏按钮显示进度条,怎么在按钮和进度条间切换呢? 解决方案 你可以定义两个panel,分别加载按钮和进度条,需要哪个就显示哪个. 解决方案二: 进度条控件 解决方案三: 按钮和进度条你肯定都能访问到,通过设置visible控制

XMOVE3.0手持终端——软件介绍(二):在2KB内存的单片机上实现的彩屏GUI控件库

一. 综述 嵌入式系统发展日新月异,安卓和ios已然战胜了当年雄霸天下的塞班,界面是我们特别看重的因素之一.不过你考虑过自己做一套系统,写一个界面库么?在单片机上自制系统,可以很好的锻炼编程能力和架构设计能力. 这些界面库都是在底层画点画线的驱动程序上实现的,基于我的XMOVE动作感应系统.基本具有硬件无关性.支持彩屏320*240的分辨率,由于考虑不同分辨率的开发过分复杂(想想看你需要计算每个点布局在哪个位置,这对安卓等系统都是大问题),因此我并没有太过完善的考虑过其他分辨率. 我已经写过一篇

后台管理系统上的一个百度地图控件无法显示地图问题!

问题描述 后台管理系统上的一个百度地图控件无法显示地图问题! 谷歌,ie都测试可以显示,唯独火狐不显示,测试火狐版本为最新版!

tableview cell更新ui-iOS cell 上用定时器更新一个控件,一闪一闪的,求问怎么解决

问题描述 iOS cell 上用定时器更新一个控件,一闪一闪的,求问怎么解决 我用tableview做了一个注册页面,上面发送验证码需要60秒内不可重复发送,我把这个按钮用定时器倒计时了,可是更新起来是一闪一闪的更新,怎么能让他不闪,求大神指教,多谢. 解决方案 不要去刷新cell 获取到这个button (比如全局,设置tag 用 viewWithTag 去取 或者 在自定义的cell 把button作为一个可以外部使用的对象来定义[如果你cell和viewcontroller是分开写的话]

[开源]在iOS上实现Android风格的控件Toast

[开源]在iOS上实现Android风格的控件Toast    iOS的风格和Apple其他产品一样,简单而粗暴.没有给人其他选择的余地,让你又爱又恨.同样的,Apple对待iOS平台的开发人员和对待大众消费者一样,也不给你留余地.UIAlertView就是一个鲜明标志.功能简单,甚至单一,定制性差,消耗资源.在资源紧张的设备上,UIAlertView的动画效果都会稍微卡一下,很是别扭. 这时还是很希望在iOS上有一个Android风格的Toast控件. 终于http://code.google

FORM上有二个pannel控件,请问怎么实现这二个Panel 之间的连线.

问题描述 FORM上有二个pannel控件,请问怎么实现这二个Panel之间的连线.怎么实现连线随着Panel的移动再变化. 解决方案 解决方案二:onpaint里面直接用panel的坐标就可以了解决方案三:Runtime还是DesignTimeRuntime下只能在放一个控件,化成线,必要时显示.DesignTime设置BaseLine就可以了解决方案四:谢谢楼上的.我要求实现的功能是通过鼠标进行连线,即起点第一个,终点第二个.怎么实现呢.解决方案五:连线?不太明白解决方案六:就是在二个控件间

如何在工具栏上添加平面下拉控件

效果图如下: 使用过WordXP的人都知道,她的界面可谓是耳目一新.尤其是她的菜单和工具条可真是酷.网上也有很多很多的人都在模仿着她,包括很多的软件公司的产品.她的出现,使得软件界刮起了一陈XP界面时尚风.废话就不再多话了,言归正题,下面我就将实现的步骤一步步地告诉给你. 第一步:新建一个单文档项目 第二步:到资源编辑器中,新增一个工具项.里面没内容的,资源就命名为ID_TOOL_ZOOM吧.呵呵,新增一个工具项与我的下拉控件有什么关系呀?当然有关系,因为一会那个下拉控件就是在这个位置上显示出来

window.showModalDialog 如何传一个空的控件?

问题描述 //传递两个空件到search页面script="window.showModalDialog('../SearchPerson/SearchPerson.htm?random_x='+String(Math.random())"+",[document.getElementById('"+this.txt_emp_no.ClientID.Trim()+"')"+",document.getElementById('"