首页> 搜索结果页
"asp中不用控件实现上传文件到服务器" 检索
共 41 条结果
ASP.NET 2.0 多文件上传小经验
   想实现任意多个文件上传的功能,点击一次按钮可以添加一个文件上传框,以前在网络硬盘上看到过。JavaScript我知道怎么实现任意添加上传文件控件,问题是添加的是Html控件,我不懂怎么让服务器端可以获取文件。     于是上google搜索“ASP.NET 多文件上传”,还真找到一篇文件,标题为《在ASP.NET中实现多文件上传》,文章里面是VB.NET实现的,功能和我要的一模一样,我主要是要看服务器端怎么获取客户端上传的文件,看了文中的代码,原来这么简单,System.Web.HttpContext.Current.Request.Files就包含客户端浏览器上传的文件了,我用C#写了一段简单的代码,原本以为应该可以了,结果出乎意料上传3个图片System.Web.HttpContext.Current.Request.Files返回的文件格式还是0个。     不知道什么原因,看看代码,这么简单不可能些错啊,再看看google搜索结果里的另外几篇文章,发现我看的第一篇不是原做,作者的网站上原作的实例有两个版本,一个是VB.NET一个是C#的,现在我不用自己写了,复制原文的代码到本地,运行,果然可以啊,那我写的代码怎么不行?反复比对我的代码和文章中代码的区别,试了几个地方,最后发现和其他地方都没有关系,原因出在<form id="form1" runat="server" enctype="multipart/form-data"> 的enctype属性上,VS 2005建的页面里没有这个属性,而文章实例里有,我后来加上enctype="multipart/form-data"后System.Web.HttpContext.Current.Request.Files就能z正常获取文件个数了。     大概是VS 2003建的页面默认有这个属性吧,否则这么重要的属性作者应该会在文章中提到的。 参考: 《在ASP.NET中实现多文件上传》 我做的试验代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script language="JavaScript"> function addFile() {  var str = '<INPUT type="file" size="50" NAME="File">'  document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str) } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">     <title>Untitled Page</title> </head> <body>     <form id="form1" runat="server" enctype="multipart/form-data">            <input type="button" value="增加(Add)" onclick="addFile()">           <input onclick="this.form.reset()" type="button" value="重置(ReSet)">           <asp:Button Runat="server" Text="上传" ID="Upload" OnClick="Upload_Click1" ></asp:Button>     <div id="MyFile">          <input type="file" name="File" />     </div>     </form> </body> </html> using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace Demo {     public partial class _Default : System.Web.UI.Page     {         protected void Page_Load(object sender, EventArgs e)         {         }         protected void Upload_Click1(object sender, EventArgs e)         {             HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files;             for (int i = 0; i < _files.Count; i++)             {                 _files[i].SaveAs(Server.MapPath("~/Files/" + _files[i].FileName));             }         }     } } 资料引用:http://www.knowsky.com/339704.html
文章
JavaScript  ·  .NET  ·  C#
2009-01-04
从零开始编写自己的C#框架(23)——上传组件使用说明
  文章导航   1、前言   2、上传组件功能说明   3、数据库结构   4、上传配置管理   5、上传组件所使用到的类   6、上传组件调用方法   7、效果演示   8、小结       1、前言   本系列所使用的是上传组件是大神July开发的,他为人比较低调,一直都没有写博。为了感谢他将这么好的插件开源出来,在这里简单的为他宣传一下。在我的圈子当中,他是一位非常牛的人,前端方面非常精通,没有解决不了的兼容性问题,而后端开发又精通多种开发语言(PHP、C#、VB、JAVA等),经手开发过的大中小型项目过百。承接各种外包开发,想联系他的话可以加入Q群327360708找July。     2、上传组件功能说明   本上传组件已将上传相关的功能都封装好了,在使用的时候,只需要使用简单的几行代码,就可以实现图片文件检验、上传权限验证、上传路径相关文件夹创建、文件上传、按配置生成各种规格(缩放)图片和进行压缩、加水印、关联数据表、自动删除旧文件与数据表记录、修改配置后所有图片文件重新生成等功能。   支持asp.net控件、html控件、编辑器(又分为本地上传与远程上传两种)与swf(这种控件上传方式没有用过,目前还不太清楚怎么调用,等有空再请教July大神)等方式上传。     3、数据库结构   本上传组件需要创建三个数据表   上传类型表用于设置可以上传的文件类型        上传配置表,它的用途大家看看字段说明就知道了,而我们主要将它用在上传图片的处理上,比如上传一张图片要生成那些格式(大、中、小与推荐图),图片规格是什么(宽、高与质量),用不用加水印,按什么比例生成等,在这里配置后马上生效,上传生成的图片规格跟着改变。        上传文件管理表记录当前系统中,所有通过本上传组件上传到服务器中的文件信息,方便管理员进行管理操作,比如前端UI重新设计后,某些页面图片规格改变了,正常情况下需 要设计师手动或使用某些软件将这些图片全部重新修改,这样处理工作量大且容易出错,而本组件则可以通过在上传配置中重新设置不同大小的图片生成规格,然后点击全部图片重新生成按钮后,程序就会在本管理表中将指定类型与配置的所有图片按新配置,使用原来的文件名称逐个重新生成出来。        4、上传配置管理   1)进入后端管理系统,系统管理=》基础设置=》上传类型设置   在这里添加与管理各种允许上传的文件类型,见下图           2)系统管理=》基础设置=》上传配置管理   在这里设置上传的各种规则,所有需要调用到上传组件的地方,都需要这里进行配置。创建好以后获取对应的Id值,在开发的代码中绑定记录,具体怎么使用后面会讲到   上传配置列表      上传配置编辑页面      广告内容管理页面,我们上传了一个广告图片      这是上传成功后,在上传文件夹中对应生成的图片,大家可以试试修改生成规格后重新上传,或点击“已上传文件管理”页面中的,看看图片变化       3)系统管理=》基础设置=》已上传文件管理    在这里显示所有通过本上传组件上传到服务器的所有记录,可以将直接将一些不要的文件删除,也可以点击“图片全部重新生成”按钮生成图片。          5、上传组件所使用到的类   上传组件所用的的类存放路径与说明(原版虽然分层,但没这么多文件,使用SQLHelper来执行数据库更新,被我改得好像很复杂的样子,呵呵...看起来是不是有点高大上,很难理解兼很复杂的样子+_+...) 项目 文件夹路径 文件名 说明 DotNet.Utilities File DirFileHelper.cs 文件夹与文件操作类,主要用于文件夹创建、上传文件添加、删除,以及其他相关的文件操作函数 DotNet.Utilities Uploader Uploader.cs 上传类,文件上传、检查、生成、水印等各种操作 Solution.DataAccess SubSonic UploadConfig.cs UploadFile.cs UploadType.cs ...... 模板生成的上传组件数据表相关实体类,以及其他数据层操作类 Solution.Logic.Managers Application UploadFileBll.cs 上传逻辑类,主要用于权限检查、上传文件的相关判断处理、增改删上传组件相关的数据库信息、关联相关数据表等功能 Solution.Logic.Managers SubSonic UploadConfigBll.cs UploadFileBll.cs UploadTypeBll.cs T4模板生成的几个上传表对应的逻辑类文件,主要给第4点那些后端管理页面所使用 Solution.Web.Managers Application FileUpload.ashx UI层编辑器调用的上传接口 Solution.Web.Managers Application RemoteUpload.ashx UI层编辑器使用远程上传接口(在编辑器上粘贴有图片时,将图片下载到服务器上,实现远程上传)     6、上传组件调用方法   代码中有三种调用上传的方法,一种是ASP.NET控件,一种是html控件,还有是远程上传(即传入远程图片Url自动下载更新)   ASP.NET控件上传调用方法 1 //这个放在cs文件Page_Load函数的前面,用于生成一个随一个Key,以便上传完成后已上传文件管理表绑定对应Id 2 protected string RndKey = RandomHelper.GetRndKey(); 3 4 #region 上传图片 5 //判断前端的ASP.NET上传控件是否选择有上传文件 6 if (this.filePhoto.HasFile && this.filePhoto.FileName.Length > 3) 7 { 8 //将当前页面上传文件绑定上传配置表Id为7的记录,给上传组件的逻辑层函数调用 9 int vid = 7; //7 广告 10 //--------------------------------------------------- 11 //创建上传实体 12 var upload = new UploadFile(); 13 //调用ASP.NET上传控件上传函数,并获取上传成功或失败信息 14 result = new UploadFileBll().Upload_AspNet(this.filePhoto.PostedFile, vid, RndKey, 15 OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(), 16 upload); 17 this.filePhoto.Dispose(); 18 //--------------------------------------------------- 19 //没有返回信息时表示上传成功 20 if (result.Length == 0) 21 { 22 //将上传到服务器后的路径赋给广告实体对应字段 23 model.AdImg = upload.Path; 24 } 25 else 26 { 27 //将出错写入日志中 28 CommonBll.WriteLog("上传出错:" + result); //收集异常信息 29 //弹出出错提示 30 return "上传出错!" + result; 31 } 32 } 33 //如果是修改,检查用户是否重新上传过广告图片,如果是删除旧的图片 34 if (model.Id > 0) 35 { 36 //删除旧图片 37 UploadFileBll.GetInstence() 38 .Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName, 39 model.Id, model.AdImg); 40 41 //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id 42 UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id); 43 } 44 45 #endregion   上面代码功能大家请看注释说明,在调用时直接复制上面代码然后修改vid的值、页面上传控件名称(filePhoto改为你自己设置的名称)、当前数据表名称(AdvertisementTable,这个一般在替换的时候已经改好了)和存放上传文件路径字段(AdImg改为当前数据表对应字段名称)就可以了。      html控件上传方法   1 #region 上传图片 2 //将当前页面上传文件绑定上传配置表Id为7的记录,给上传组件的逻辑层函数调用 3 int vid = 7; //7 广告 4 //--------------------------------------------------- 5 //创建上传实体 6 var upload = new UploadFile(); 7 //调用ASP.NET上传控件上传函数,并获取上传成功或失败信息 8 result = new UploadFileBll().Upload_Web(vid, RndKey, 9 OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(), 10 upload, "Html上传控件名称"); 11 this.filePhoto.Dispose(); 12 //--------------------------------------------------- 13 //没有返回信息时表示上传成功 14 if (result.Length == 0) 15 { 16 //将上传到服务器后的路径赋给广告实体对应字段 17 model.AdImg = upload.Path; 18 } 19 else 20 { 21 //将出错写入日志中 22 CommonBll.WriteLog("上传出错:" + result); //收集异常信息 23 //弹出出错提示 24 return "上传出错!" + result; 25 } 26 27 //如果是修改,检查用户是否重新上传过广告图片,如果是删除旧的图片 28 if (model.Id > 0) 29 { 30 //删除旧图片 31 UploadFileBll.GetInstence() 32 .Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName, 33 model.Id, model.AdImg); 34 35 //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id 36 UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id); 37 } 38 39 #endregion     与前面不同的只是调用的上传函数Upload_Web不一样而已,不过这段代码没有直接测试过,理论上是没有问题的,呵呵...(以前前端项目中使用过正常,不过代码与本框架的不一样,所以就不贴出来了)       远程上传方法   这种上传方法需要配合编辑器使用,框架中的编辑器已设置好了,所以不进行详细说明     7、效果演示    1)上传广告图片后修改图片配置后重新生成演示   演示前大家先更新一下代码,打开AdvertisementEdit.aspx.cs文件,找到AdvertisementBll.GetInstence().Save(this, model),在这个代码后添加下面代码,之前发布的代码忘了添加新增记录时,同步绑定图片记录Id了  View Code     在广告内容管理页面点击新增      添加后显示效果      生成的文件以及大小      进入上传配置管理,修改广告图片的配置,如下图      进入已上传文件列表,点击图片全部重新生成      查看文件夹中的图片大小,已改变了          2)上传非图片文件演示   新建一个文本文件,然后输入内容      将文本文件名称修改为bbb.jpg      打开广告图片编辑窗口,选择刚改名为bbb.jpg的假图片,点击上传      程序会判断出该文件不是图片,不给予上传        3)远程图片上传演示   复制浏览器上的图片到编辑器,点击远程上传图片按钮      点击查看Html代码,可以看到Url为远程的      打开远程上传程图片界面,点击确定      上传成功      编辑器中显示的图片已经是上传后的了      查看Html对比一下      看看文件夹里上传的文件            8、小结   写到这里,本系列代码部分的说明算是结束了,回头看看与自己订下的方案,还是有不少偏差,自己也觉得很不满意。由于近段时间工作越来越忙,已经没有太多时间兼顾本系列的编写,一些细节也就没空说明,代码部分只能是草草收场了。   有时打开前面所写的章节,自己会感到写得很粗糙,无论文笔或讲述的内容,都存在问题。不过在编写的过程中,自己的确得到了很大的提升,在与众多园友、群友交流的过程中,也学习了很多很多新的知识点,相信如果时间充足,重新写过的话就不会是这个样子了,可能会像本章一样,只是针对一个知识点进行描述,这样会帮忙大家更容易了解。另外,设想中需要绘制的不少流程图或其他相关的图形也没有画出来,更不要说视频了,这些只能是以后有时间再补充了。   对于代码部分,确实像某些朋友所说的那样,由于使用了模板生成,没有对代码进行优化,存在着大量冗余代码,暂时先这样用用吧,反正使用了模板改起来也很方便,对二次开发与维护开发效率也没有影响,以后有时间再看看是否进行优化吧。   学习本框架的开发,首先一定要有ASP.NET的基础,没有基础的话想一下子学习框架开发,那真的很难,就算你直接加我QQ问我,我也很难帮你跳过基础直接学习框架开发。还有就是如果不看前面的文章,想加快速度直接从代码着手,如果你是大神的话这也没有问题,不然想要理解整个开发思路又不想花时间看说明,那我也没办法帮到你,除非你同我在一块工作,我花一天时间为你讲解,那样你可能就会很快上手,能对本框架一知半解了(要全部了解还是得从前面文章学起)。   另外如果学习过程中碰到问题时,可以多Debug尝试自己解决,解决不了再上百度或Google查查,又或者在贴子的评论处发发你的问题,或Email给我,当然在QQ群里问问更方便,很多朋友都乐意为你解答。直接问我也行,不过近来实在太忙了,不可能实时帮你解答遇到的各种问题,必竟我本人也要工作,也要养家糊口。   在学习的过程中,必须要从前面开始看起,从中间查看的话,特别是代码部分,你会一头雾水,因为都是在前面的基础上衍生过来的。当然15到20章看不明白的可以大概的了解一下内容就可以了,直接用21章说明步骤进行操作,或自己创建一些数据表,根据已完成的页面功能复制过去修改几次,那你就会很快的上手。等对使用本框架开发熟悉以后,再去研究底层应用的一些技术,那样就会更容易了解框架结构了。       做上面演示时才发现,原来还存在一些小BUG,所以重新整理了一下,将修改过的文件找出来打包,大家请点击下载更新,或重新下载上一章的解决方案也行 由于框架不是非常成熟,很多朋友不是用来学习而是直接用到项目中,但不熟悉框架引起不少小问题,所以停止提供下载,有需要学习的可以到群共享里下,不便之处敬请谅解。       本文转自 AllEmpty 博客园博客,原文链接:http://www.cnblogs.com/EmptyFS/p/3836684.html,如需转载请自行联系原作者
文章
前端开发  ·  .NET  ·  C#  ·  数据库  ·  数据安全/隐私保护
2017-11-14
[翻译]运用HtmlInputFile服务器控件上传多个文件
由于发现以前写的文章都是乱来的,想到什么就写什么?看到别人的文章何等地规范,又通俗易懂,条理又很强,于是乎我就想了一个方法,来训练一下自己的写作方式,通过翻译一些老外的文章来玩玩,可能不断格式化自己可以写出格式不错的文章来,费话不用多说的,今天来翻译一篇比较简单的文章来做为这个计划的开始,OK!运用HtmlInputFile服务器控件上传多个文件[Upload multiple files using HtmlInputFile control]。  Published: 05 Feb 2006   By: Haissam Abdul Malak      在这篇文章中,我将讲述如何应用几个文件上传控件。本文将通过三个HtmlInputFile服务器控件同时上传三个文件的例子来讲述。 摘要:   当微软发布ASP.NET 1.0时就可以将本地文件上传到WEB服务器上,这通过HTML input file服务器控件就能够实现这样的操作,Html Input File服务器控件可以允许用户浏览本地文件。   现在让我们添加三个Html input file服务器控件,使得用户能够同时选取三个文件,并添加一个按扭Batch Upload,用于提交事件,使得三个文件上传到服务端。同时我们将过滤上传的文件,分别放在两类中:     1.图片      2.其它   我们将创建两个文件夹放于程序的根目录中,第一个命名为“Images”用于放置(JPG,GIF)文件,第二个为“Others”用于保存除以上两种文件以外有文件。 HTML代码   让我们来看一下,加入了三个HTML INPUT File服务器控件的HTML代码,代码如下:  1<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"  2Inherits="MultipleUpload.WebForm1" %> 3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 4<HTML> 5  <HEAD> 6    <title>WebForm1</title> 7    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET  8 97.1">10    <meta name="CODE_LANGUAGE" Content="C#">11    <meta name="vs_defaultClientScript" content="JavaScript">12    <meta name="vs_targetSchema" 13    content="http://schemas.microsoft.com/intellisense/ie5">14  </HEAD>15  <body MS_POSITIONING="GridLayout">16    <form id="Form1" method="post" runat="server">17      <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 280px; 18        POSITION: absolute; TOP: 101px" runat="server" Text="Batch Upload" />19       <div id="Div1" runat="server" style="Z-INDEX:102;LEFT:165px;WIDTH:1026px;20       POSITION:absolute;TOP:7px;HEIGHT:19px">21          <INPUT id="FileUpload1" style="WIDTH: 389px; HEIGHT: 22px" 22            type="file" size="45" runat="server">23          <asp:Label id="Label1" runat="server" Width="598px" 24            ForeColor="Red" />25       </div>26       <div id="Div2" runat="server" style="Z-INDEX:103;LEFT:166px;WIDTH:1026px;27       POSITION:absolute;TOP:38px;HEIGHT:19px">28          <INPUT style="WIDTH: 389px; HEIGHT: 22px" type="file" 29          size="45" runat="server" id="FileUpload2">30          <asp:Label id="Label2" runat="server" Width="357px" 31          ForeColor="Red" />32        </div>33       <div id="Div3" runat="server" style="Z-INDEX:104;LEFT:166px;WIDTH:1026px;34       POSITION:absolute;TOP:68px;HEIGHT:19px">35          <INPUT style="WIDTH: 389px; HEIGHT: 22px" type="file" 36          size="45" runat="server" id="FileUpload3">37          <asp:Label id="Label3" runat="server" Width="361px" 38          ForeColor="Red" />39       </div>40    </form>41  </body>42</HTML>43   以下图片显示以上代码解析后的浏览器显示的样式:    Code Behind   为了上传文件我们需要用到以下几个类:     1.HttpFileCollection     2.HttpPostedFile     3.Request.Files     4.System.IO.Path   HttpFileCollection类包含了一系列的HttpPostedFile,为上传服务器文件的一个集合,为了取得用户所选的文件我们要运用到Request.Files,它将返回一个文件集合保存于HttpFileCollection对象中。运用System.IO.Path来判断文件的扩展名以及文件名,我们将通过扩展名来将文件分成两类。  1HttpFileCollection uploadFilCol = Request.Files; 2for(int i=0;i<uploadFilCol.Count;i++) 3{ 4  HttpPostedFile file = uploadFilCol[i]; 5  string fileExt = Path.GetExtension(file.FileName).ToLower(); 6  string fileName = Path.GetFileName(file.FileName); 7  if(fileName != string.Empty) 8  { 9    try10    {11      if(fileExt == ".jpg" || fileExt == ".gif")12      {13        file.SaveAs(Server.MapPath("./Images/") + fileName);14      }15      else16      {17        file.SaveAs(Server.MapPath("./Others/") + fileName);18      }19    }20    catch(Exception ex)21    {22      throw ex;23    }24  }25}   你可能发现我们通过Foreach从HttpFileCollection集合中取得HttpPostFile对象,将扩展名保存在fileExt变量中,将文件名保存在fileName变量中。然后我们判断它是个图片文件,通过HttpPostFile.SaveAs()方法来将上传的文件保存在“Images”文件夹下,将其它文件保存在还有一个文件夹“Others”下。   下一步我们将创建一个方法ShowMessages()用来显示上传的状态:    1private void ShowMessage(string message, int fileUploadPos ) 2{ 3  if(fileUploadPos ==0) 4  { 5    Label1.Text = message; 6  } 7  else 8  { 9    if(fileUploadPos ==1)10    {11      Label2.Text = message;12    }13    else14    {15      Label3.Text = message;16    }17  }18}   ShowMessage方法共有两个参数,第一个参数是用于显示的字符串,第个个参数是HttpFileCollection的集合索引。   这个方法将用于显示上传各个文件的状态作息,以及判断是否返回一个错误信息,下面的截图显示上传成功后的状态信息: 完整代码:  1HttpFileCollection uploadFilCol = Request.Files; 2for(int i=0;i<uploadFilCol.Count;i++) 3{ 4  HttpPostedFile file = uploadFilCol[i]; 5  string fileExt = Path.GetExtension(file.FileName).ToLower(); 6  string fileName = Path.GetFileName(file.FileName); 7  if(fileName != string.Empty) 8  { 9    try10    {11      if(fileExt == ".jpg" || fileExt == ".gif")12      {13        file.SaveAs(Server.MapPath("./Images/") + fileName);14        this.ShowMessage(" " + fileName + " Successfully Uploaded",i);15      }16      else17      {18        file.SaveAs(Server.MapPath("./Others/") + fileName);19        this.ShowMessage(" " + fileName + " Successfully Uploaded",i);20      }21    }22    catch(Exception ex)23    {24      this.ShowMessage(" " + ex.Message, i);25    }26  }27}   为了能够正常的运行,有两个要点需要我们注意:     1.如果你需要上传的文件超过4MB就需要修改配制文件Web.config中的<httpRuntime>节点的maxRequestLength属性的值,请注意单位为KB。     2.必需给ASPNET用户帐户能够上传文件到刚创建的两个文件夹的权限。 总结:  在这篇文章中,你可以看到HTML file服务器控件的强大之处,将代码加入到你的应用程序中就可以让用户同时上传多个文件到Web服务器中。 本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/03/07/translate_upload_files_using_htmlfileinput.html,如需转载请自行联系原作者
文章
.NET  ·  开发框架  ·  C#  ·  索引  ·  JavaScript  ·  前端开发
2017-11-22
ASP.NET 实用资料[转]
使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 图片滚动代码。 css——之三行三列等高布局 Datagird TemplateColumn类型列中如何设定日期格式为yyyy-MM-dd格式? SQL Server各种日期计算方法 在sqlserver中如何根据字段名查找字段所在的表 [CommunityServer]看RBAC的一方景象 七招制胜ASP.NET应用程序开发 企业库之数据访问的一个小应用 SQL查找某一条记录的方法 简介微软发布的Data Access Application Block 把Excel表中的数据导入数据库(存储过程、数据库作业) 通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转) 一个分组查询的SQL 常用算法(附源码可直接执行) 网络蜘蛛(crawlers) ,SEO,网络公关等相关资源与工具的收集与整理 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载) 经典数据库记录分页代码 [GridView控件]自定义分页 Web C#2.0 DataSet和Reader封装组件实现自动多数据库切换(含组件源码和实例) 为GridView删除添加提示 扩展GridView(五)——固定表头、指定行或指定列 Asp.net 2.0 Treeview 无限级无刷新示例 运用JAVASCRIPT,写一个类,类名:student,他的属性:name,age,tall,他的方法:getName,getAge,getTall SQL IF..ELSE..在存储过程的使用规范 sql server日期时间函数 页面自动刷新 css的一些基础的东西 利用css和js实现firefox和IE都支持的页面局部打印 总结一些js自定义的函数 從無到有實現一個xml數據庫登錄驗証 图片保存到数据库和从数据库读取图片并显示(C#) [转]FreeTextBox使用详解 将上传图片打上防伪图片水印并写入数据库 asp.net 2.0中一次性更新所有GRIDVIEW的记录 VS2005 TreeView 的 CheckBox 被点击时的引发页面回发事件 扩展GridView(四)——每行复选框的全选与取消全选 [翻译]开发一个HTML在线编辑器(一) Castle ActiveRecord(一)概述 用sql 得到某表下的列名 一个二级域名转向类(转) sql 分页存储过程 sql2000下 分页存储过程 回归命令行 SQLServer的命令行工具们(2) – sqlcmd.exe(中篇) 分页及页码导航 用户控件 十分钟内学会:根据数据库生成站点导航 自己写的几个高效,简洁的字符处理函数 用一句SQL取出第 m 条到第 n 条记录的方法 老问题:js实现gridview中的全选和反选 js取得gridview中获取checkbox选中的值,郁闷了半天 JavaScript 经典代码大全:有 目录 及 编号 的哦 ! 深入DML JavaScript 網頁打印處理 HTML语言:经典笔记'800')this.width='800';if(this.height>'600')this.height='600';" border=0> 员工管理系统(数据库部分)--一个老师很久就布置的作业 CSS 实用笔记 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务 SQL Server各种日期计算方法 如何创建类型FreeTextBox的编辑器 MemberShip(图) 让你的ASP.NET虚拟主机也支持子网站 使用 SqlBulkCopy 大量复制文字文件之 C# 程序代码 Community Server 2.1 安装到远程虚拟主机上常见问题解决 (摘)开源AJAX开发框架 继续发布VS2005下DataGridView 的多种样式列控件 sql server作业用法 SQL2000 和 SQL2005 下 行列转换 示例 使用批处理产生日期(时间)文件、文件夹 ASP.NET 2.0 Security FAQs 效果直逼flash的Div+Css+Js菜单 一个二级域名转向类(转) ASP.NET分页系列转载 (转载)基于.net开发平台项目案例集锦 轻松学DIV教程(div+css布局) 如何让SELECT 查询结果额外增加自动递增序号 导出sql server 数据库为Excel的数据字典的小工具 使用Gridview和ObjectDataSource轻松实现自定义分页 在数据回发时,维护ASP.NET Tree控件的位置 除非迫不得已不要用游标 基于.NET的CMS软件的选择 搜索引挚项目(附源码) 重写GridView分页样式! 重写GridView 开源代码生成器:SmartCode 构建基于ListView(Win)的数据绑定对象 随心所欲的Web页面打印技术 扩展GridView控件(上) Gridview动态隐藏空字段 ASP.NET组件DataGrid的分页实用方法 基于角色-功能-资源的权限控制模型的设计与实现 asp.net 2.0 权限树的控制(多处转载) Castle ActiveRecord Hands On Lab(1):基本数据访问 如何在数据层分页以提高性能 为gridview添加删除提示。 解决ASP 2.0中GridView控件的删除、插入、编辑命令操作客户端确认问题的另一方法 基于.net开发平台项目案例集锦 EnterPrise应用(5) Security Application Block应用程序块 授权处理(VB.NET) Ajax实现无刷新三联动下拉框 ASP.NET 2.0打造购物车和支付系统之 一 ASP.NET 2.0打造购物车和支付系统之二 通过样式表实现固定表头和列 数字转换为大写人民币(附源码)_AX 使用RewritePath方法实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX 基于.net开发平台项目案例集锦 效果直逼flash的Div+Css+Js菜单 一段非常简单的让图片自动切换js代码 ASP.NET弹出一个对话框 通过样式表实现固定表头和列 在VS2005中 GridView导入Excel的两点小技巧-附源码 asp.net 2.0 中GridView里设置日期格式 针对Enterprise Library 2.0的框架:OFrame预览(代码和工具全部开源) {asp.net2.0}##一个关于GridView的网站 障眼法--如何去掉动网新闻系统的版权信息 ASP.NET简单分页 NQL.NET 数据库对象查询语言简介 2 Asp.Net 学习资源列表 asp.net身份验证和授权 在VS2005中 GridView导入Excel的两点小技巧-附源码 [转载]Asp.Net 2.0 发布问题 权限树中Checkbox的操作[Asp.Net2.0] 如何于DataGridView控件中以跨数据行方式显示数据 asp.net2.0中,实现treeview中选择父级checkbox时,子级连动 整理转载 自定义DataGrid控件开源 [视频讲解]GridView里做链接实现新闻列表到详细内容页的跳转 『原创』以学论道之ASP.NET中的文件流操作 GridView控件自定义分页详解 3-tier Architecture with ASP.NET 2.0 : Tutorial By Scott Mitchell TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类 基于功能(代码)的权限管理 一步一步学习ObjectDataSource控件--自定义分页排序 自己编写的操作实体类的分页控件, 实现页码层与数据库的具体的信息隔离 Alexa世界排名原理+作弊源码,为网站赢得好排名 Ajax实现无刷新树 GridView 批量删除,自定义分页,定位页码 关于GridView中自定义分页、单选、多选、排序、自增列的简单应用 Ajax实现无刷新三联动下拉框 GridView模版列嵌套GirdView显示主从表数据 Ajax无刷新实现图片切换特效 asp.net 2.0 用户管理功能结构 Asp.Net2.0权限树中Checkbox的操作 Membership学习(二)membership入门[xgluxv] Membership学习(三)Membership Providers介绍[xgluxv] Membership学习(一) Membership介绍[xgluxv] Membership学习(四)-自定义MembershipProvider Gridview中当设置自动生成列时对列中字段使用 html代码显示 一点一点学ASP.NET之示例——HttpModule 示例 一个三层架构的WinForms程序的完整范例(.NET 1.1/Northwind) 发布XenoCode 2006 for DotNet 2.0破解程序 一个简单的存储过程 Css2快速参考 在b/s开发中经常用到的javaScript技术 NHibernate的灵活配置 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2) 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(1) 发布一个支持大量文本打印的PrintDocument派生对象,公开源代码。 史上最全的Windows进程详解! PetShop4.0学习第一天 删除前的确认窗口 我对图形变换滤镜的收集(CSS渐变滤镜大全) 2006年it人士必去的10个网站 DataReader应用小示例(数据库访问操作的基本过程2.0通过) (收藏)抓取Web网页数据分析 GridView/DataGrid单元格不换行的问题 如何在GridView中使用DataFromatString VS2005新控件之GridView 使用高级技巧系列[一][视频] VS2005新控件之GridView 使用高级技巧 几个.Net开源的CMS、Portal系统 gridview中加弹出窗口用例 GridView&DetailsView对XML文件增删改 [译]Scott Mitchell 的ASP.NET 2.0数据教程之十一: 基于数据的自定义格式化 初谈ADO.NET中利用DataAdapter进行数据操作 单一登录 Web 应用程序的企业级安全系统 发布XenoCode 2006 for DotNet 2.0破解程序 IBatisNet+Castle构架开发指南 IBatisNet+Castle构架开发指南 (续) 附代码生成模板 GridView根据值的变化改变行列样式 使用ASP.NET 2.0中的GridView控件 我积累的数据库操作类(ASP.NET) 我积累的数据库操作类(ASP.NET) 我积累的数据库操作类(ASP.NET) GridView 控件编程的事件 css+div布局总结--新手入门 15分钟内快速构建数据访问层(翻译) Transact_SQL小手册(各种sql语句大集合) Exports datatable to CSV or Excel format [转贴]开发VS2005下ComboBoxTreeView(下拉列表框弹出树) 与ToolStripComboBoxTreeView(下拉列表框工具条弹出树) 使用配制文件定制身份验证和基于角色的安全 一句SQL得出表中重复的数据(TMP) SQL精妙语句 Asp.net2.0:如何使用ObjectDataSource(配合ORM) Sql Server数据库的备份和恢复措施 SQL Server2000数据库文件损坏时如何恢复 存储过程编写经验和优化措施 (转) 征集佳句-精妙SQL语句收集 利用WebBrowser彻底解决Web打印问题 各种sql语句大集合 自定义用户访问权限 DataGrid导出excel和word的例子 具有滚动条的div SQL Server 2005 Express 附加的数据库为“只读”的解决方法 Sql 导入/导出Excel 不走寻常路 设计ASP.NET应用程序的七大绝招 ASP.NET性能优化 ASP.NET性能优化 对数据库Sql Server常用操作类库SQLHelper 如何取出treeview中checkbox的值 海量数据库的查询优化及分页算法方案 使用配制文件定制身份验证和基于角色的安全 VS2005新控件之GridView 使用高级技巧系列[二][视频] 一条经典的汇总的sql sql Server 索引优化 (转) Log4Net使用指南 一些有用的sql语句实例 Enterprise Library 2.0 -- Data Access Application Block 在Excel中将连续多列相同数据项合并 执行SQL存储过程事事例 SQL宝典 SQL语句导入导出大全(轉,收藏用)  gridview中手工排序 Asp.net 项目中引入Nhibernate 入门(一) 利用asp.net 2.0的客户端回调功能制作下拉框无限级联动 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表) IBatisNet基础组件 用javascript将数字转换为中文大写 asp.net的TextBox回车触发事件 利用Sql作业在asp.net 里面实现异步调用存储过程. 抓取Web网页数据分析 VS2005中如何动态设置数据库连接信息? GridView控件修改、删除示例(修改含有DropDownList控件) JavaScript有用的代码,摘抄自:http://bbs.tech.163.com/board/rep.jsp?b=tech10&i=1296&p=0[转] 一些sql语句的详细解释 DataGrid使用心得(附大量代码) [转] SQL Server中各个系统表的作用 使用 Web Services Enhancements 2.0 的基于角色的安全性 Flash+asp.net打造FLASH首页新闻发布 SQL存储过程事务和优化方法(包括查询方式语句结合) 小记存储过程中经常用到的本周,本月,本年函数 GridView Css ASP.NET 2.0 Language Swithcer and Theme Swiche ASP.net2.0学习资料汇总 触发器与约束的适用条件 GRIDVIEW 中当数据行数未满时,填充空白行 ComponentArt Web.UI for ASP.NET 2.X序列号 创建用于监视对student表进行插入和更新操作的触发器 20060516: 实现圆角div效果 .net绝对技术资料 sql server2000中使用convert来取得datetime数据类型样式(全) 一些sql 语句(行列转换等) [转载] Owc的使用---自己封装好的类可以实现14种分析图 非常經典的WEB列印方案 CuteEditor 5.0 的使用 ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) MD5算法的T-SQL实现 ASP.NET2.0中数据源控件之异步数据访问 DotNetGrid 控件下载 DotNetGrid 介绍 WEB打印-------我的搜集 在校生数据导入范例 关于多极分类的几个存储过程 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表) 树形数据查询示例 转 SQL Server 数据库管理常用的SQL和T-SQL语句 IIS状态代码的含义 .NET平台下带权限控制的TreeView控件节点生成算法(转载) 实现HTTP内容的抓取 给SQL Server存储过程,传送数组参数的变通办法 在.net中使用Fckeditor [转] SQL的3种连接查询 海量数据库的查询优化及分页算法方案 [转] transact---sql高级查询(下) [转] transact---sql高级查询(上) SQL Server数据库开发的二十一条军规 Excel编程 存储过程语法 SQL 语法参考手册 ASP.NET之精通弹出窗口 在网页中插入视频播放代码全集 无限级分类的实现 资源名称资源名称取得汉字字符串的拼音首字母的mssql函数 树_ajax 树_ajax GridView与DataGrid中的数据项访问差别 Gridview中onmouseover的效果 ASP.NET2.0+SQL Server2005构建多层应用(转载) 修正过的通用分页存储过程 [推荐]网络上通用的调查答卷系统-XML做数据库(将DataSet转化成字符串) MS-SQL数据库开发常用汇总 在visualStudio里面使用SqlServer2000作为数据源 获取影响行数和ID的存储过程 C# .Net中的类型转换 C#.net常用函数 SQL注入 FCKeditor2.2+ASP.NET2.0不完全攻略 FCKeditor2.2+ASP.NET2.0不完全攻略 【转贴】datagrid数据导出到excel文件给客户端下载的几种方法 GridView动态生成模板列 关于树形控件 asp.net 备份和恢复SQL SERVER 数据库 Asp.net(C#)实现验证码功能 Asp.NET程序中常用的三十三种代码 分割以逗号作为分割符号的字符串并插入到表中 列出一个表中的某个字段重复的记录 DataGrid系列技巧(导出excel,事件,多种方式呈现数据,全选全删)等等等 把以"文本文件(制表符分割)"保存的EXCEL文件导进SQLSERVER2000的DEMO! 总结:ADO.NET在开发中的部分使用方法和技巧 (转贴) DATAGRID的全选/取消全选控制(CHECKBOX) 使用SqlBulkCopy类加载其他源数据到SQL表 使用SqlBulkCopy类加载其他源数据到SQL表 使用SqlBulkCopy类加载其他源数据到SQL表 一个调查实例<主要训练向panel中添加控件>包括全部代码 ASP.NET 2.0客户端回调的实现分析(3)[ZT] [原创]把SQL的动态查询改成SQL查询 SQL Server实用经验技巧集 使用 DataAdapter 执行批量更新 treeview的建立,更新,删除 C#实现web信息自动抓取 [收藏].net关于企业Excel报表的生成 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转) .NET进销存系统开发笔记------之Gridview应用 .net 2.0中GridView无限级嵌套的实现 导入Excel电子表格数据到SQLSever数据库的另一种方法 一个购物车的简单实现(多层开发) ASP.NET2.0中 TreeView 和ORACLE 数据绑定的一种方法 ASP.NET2.0 ObjectDataSource的使用详解(2) ASP.NET2.0 ObjectDataSource的使用详解(1) 将DataSet更新自动提交到数据库工具类实现 超强扩展性的DNN-DotNetNuke模块功能分类列表(from 中国DNN) 世界上主要的一些搜索引擎 Survey Admin 示例:实现 Microsoft .NET 基于角色的安全性(转) NHibernate Step by Step (四)Session、Query及HQL NHibernate Step by Step (三) Configuration和Sessionfactory Microsoft .NET Pet Shop 4 架构与技术分析 PetShop的系统架构设计 Asp.Net 2.0 TreeView的Checkbox级联操作 无废话-SQL Server 2005新功能(1) - TSQL 导出导入Excel(DataSet,DataGrid) DNN开发中的一些细节(1) DNN开发中的一些细节(2) ASP.NET2.0: Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码] TreeView 爱恨之间 Transact SQL 常用语句以及函数 Transact SQL 常用语句以及函数 ASP.NET 2.0 正式版中无刷新页面的开发 DNN开发中的一些细节(1) ASP.NET2.0快速入门--高级数据方案(3) 结合CodeSmith开发和调试DNN3模块 SqlDataSource WEB控件:当DeleteCommandType="storedProcedure"时 关于TreeView控件专题 利用Treeview做权限树的一种方法 利用Treeview做权限树的一种方法 (新)在ASP.NET中调用存储过程传参数 ASP.NET2.0快速入门系列--高级数据方案(上) ASP.NET2.0快速入门--高级数据方案(中) asp/asp.net中遍历树型结构. ASP.NET 2.0中使用multiview控件 ASP.NET2.0快速入门系列--高级数据方案(上) DataGrid,GridView和DetailsView中添加删除确认提示 VS2005中用Code Snippets提高开发效率 IIS和ASP.NET2.0 关于vs 2005的一个问题, 解决The path "xxxx' maps to a directory outside this application, which is not supported. VS2005第一天 Failed to access IIS metabase 无ASPX文件部署(续) ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署 对vs2005生成dll文件的一点疑惑 ASP.NET 2.0 新特性 WEB Service 下实现大数据量的传输 switch your web application project to use development machine's IIS server [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转载) GridView 控件使用不完全指南! 【原创】asp/asp.net中遍历树型结构. .NET Pet Shop 4.0案例研究预览篇 关于树形结构的研究的资料收集 单点登录(SSO)的核心--kerberos身份认证协议技术参考(三) Gridview:在进入编辑模式后动态添加控件 ASP.NET中大结果集的分页[翻译] Asp.Net Forums研究文章集合(收藏) ASP.NET2.0中Gridview中数据操作技巧 SQL Server中利用存储过程来高性能地进行分页 关于二级域名Cookie的问题及解决方法 一步一步建网-2-DotNetNuke4-5/6-杂项/感! 通过系统配置来提高ASP.NET应用程序的稳定性 GridView 控件使用不完全指南!(续一) ASP.NET应用程序的部署--兼谈aspnet_compiler.exe命令 RDLC报表(一) RDLC报表(七) GridView 控件使用不完全指南! DNN皮肤制作 一个登陆页面,包含了初始化用户,输入检测,错误处理等 DNN皮肤制作 基于dotnetnuke的网站全新上线! [导入]DotNetNuke Skin 與 Container 設計介紹 CodeSmith3.0开发资料下载 CodeSmith开发系列资料总结 提高SQL执行性能方案:如何让你的SQL运行得更快zt Visual Studio 2005 的101个示例下载 网络数据库挖掘程序的设计 对联广告代码效果大全 网站生成静态页面,及网站数据采集的攻、防原理和策略 [原创]终极防范SQL注入漏洞! 【先锋海盗类】Ver2005 完美版 拿别人的新闻来用,虽然我知道这样不好,还是用了。。。 网页小偷程序ASP.net 数据采集程序(网页小偷)点滴心得 部署安装时写入SQL SERVER和Web.config 将博客园程序从Visual Studio 2003迁移到Visual Studio 2005的尝试 开篇:Nhibernat.Test项目分析之:ConfigurationTest 基于NHibernate的三层结构应用程序开发初步 15分钟内快速构建数据访问层(翻译) Asp.net 2.0专题二:本地化(Localization) 数据库应用基础系列 深入了解 SQL Server 2000 与 ADO.NET 中的事务隔离及数据锁定 第2章 并发操作的一致性问题 (2) 在asp.net 2.0中使用SqlBulkCopy类迁移数据 使用asp.net 2.0和SQL SERVER 2005构建多层应用 推荐个关于 team system教学的好站点 推荐个关于 team system教学的好站点 DataList控件也玩分页- - SQL Server 两个触发器例子,大家看看怎么样? 发布一个原创的基于Ajax的通用(组合)查询(续) 在IIS6.0下ASP .NET 的版本冲突问题 FCKeditor应用小记--起步篇 WEB Service 下实现大数据量的传输 55种网页常用小技巧(转载) [转]Microsoft PetShop 3.0 [转载]用WSE在Web服务中验证用户身份 一次SQL Server 2000修复实践的说明 新数据网格DataGridView简介(转自MSDN) [转贴]Visual Studio 2005常用插件搜罗 第 4 章 构建以数据为中心的应用程序 网 站 策 划 [转载] 在.net安装程序部署SQL Server数据库 [转载] 在.net安装程序部署SQL Server数据库 ASP.NET程序中常用代码汇总(一)(转载) ASP.NET程序中常用代码汇总(二)(转载) ASP.NET程序中常用代码汇总(三)(转载) ASP.NET程序中常用代码汇总(四)(转载) ASP.NET程序中常用代码汇总(五)(转载) 露雨资源库(第一个.net2.0软件)二 ADO.NET 2.0 大批量数据操作和多个动态的结果集 继续发布VS2005下DataGridView 的多种样式列控件 一个支持asp.net2.0和Sql server及Access的免费空间 FAQ:关于aspspider.net的申请与使用(逐渐整理中) ASP.NET 2.0中的成员管理与角色管理 ASP.NET中用哪种方式表格化数据 DotNet软件开发框架 知识管理系统分析之一:网络蜘蛛的分析 如何实现在Asp.net下XP风格的下拉菜单 CodeSmith基础(二) CodeSmith开发系列资料总结 利用 SharpZipLib方便地压缩和解压缩文件 GridView控件使用经验 一个支持asp.net2.0和Sql server及Access的免费空间 新版XNet.SqlHelper 使用ASP.NET 2.0 Profile存储用户信息[翻译] Level 200 FreeTextBox使用详解 (版本3.1.1) Web Services的身份验证 [小结]关于asp.net个性化站点的设置 网络数据库挖掘程序的设计 使用企业程序库的两点体会 ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) 如何使网站基于CA认证访问 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 一完美的关于请求的目录不存在而需要url重写的解决方案! 如何建立有效的.Net软件注册保护机制 常用CSS ASP.NET程序中常用代码汇总(五) ADO.NET 2.0 大批量数据操作和多个动态的结果集 在Apache环境下成功的运行ASP.NET 使用ADO.net转换数据到Excel格式并提供下载 打开一个Excel模板文件填充数据另存为一个文件 一个关于DataGrid的打印类,分享,感谢作者 把excel 数据导入数据库 NHibernate文档翻译 第5章 集合类(Collections)映射 NHibernate文档翻译 第4 章 O/R Mapping基础 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 自动代码生成器 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 Enterprise Library Step By Step系列(十):缓冲应用程序块——进阶篇 Asp.net中DataGrid利用DataRelation显示主从表信息(可控制从表信息隐藏和显示). Cookie 支持二级域名和FormsAuthentication 加强版 aspx->cs->dll 无aspx文件部署 无ASPX文件部署(续) asp.net报表解决方法(第一次使用cnblogs的blog) NHibernate文档翻译 第3章 持久化类(Persistent Classes) 《ASP.NET办公自动化系统开发实例导航》笔记三 人事管理模块 [转]Microsoft PetShop 3.0  《ASP.NET办公自动化系统开发实例导航》笔记二 系统管理模块设计 《ASP.NET办公自动化系统开发实例导航》笔记一 NHibernate文档翻译 第2章 ISessionFactory配置 TreeView常用操作 NHibernate文档翻译 第1章 体系结构 关于ASP.NET中调用Excel组件不能结束进程的解决方法 用ActiveX控件和JavaScript脚本实现基于Web的票据套打(源码下载) 搜索引擎, 请手下留情 我写的Asp.net操作Excel的一个类库ExcelHelper(源码下载) Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇 一个经典的ADO.NET入门例子(CSDN博客迁移) [源代码]系统框架NickLee.Framework.V1.X for asp.net asp.net利用OWC生成分析報表 把aspx文件编译成DLL文件 ADO.NET 2.0 大批量数据操作和多个动态的结果集 让.Text的搜索引擎支持二级域名 微软技术大会 Tech.Ed2005 所有讲义(ppt格式)下载地址 应用系统架构设计 应用系统架构设计-补全篇 简单实用的DATAGRID组件 .Text 支持二级域名之二 Cuyahoga的安装及结构 也nhibernate会遇到问题,还好找到原因了 [C#]NHibernate处理多帐套问题 滚动DataGrid 蛙蛙推荐:迎接web2.0:写一个RSS.HTC组件 分享:微软提供的一个开源控件treeview 的一小个用法 发布一个原创的基于Ajax的通用(组合)查询(续) 在ASP.NET页面中冻结DataGrid的列或头部 Cuyahoga代码的研究之一:Cuyahoga.Corel项目 Cuyahoga研究三:用户配置数据的处理 Cuyahoga研究之二:利用MD5CryptoServiceProvider返回字符串的MD5 Hash值 [精华&原创]可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) Asp.net中把DataTable或DataGrid导出为Excel 技巧百问(5):打造超级浮动广告(不受屏幕限制) 使用HttpModule实现多个域名分别“绑定”到子目录 利用XML实现通用WEB报表打印 续:利用XML实现通用WEB报表打印(实现篇) 昨天的性能优化与今天的网站故障 一个关于DataGrid的打印类,分享,感谢作者 把文件上载到数据库中 .Text分页技术(1)分页的存储过程分析 Community Server专题十:MemberRole之RoleManager 构建动态导航的Web应用程序 SQL Server 用触发器实现表的历史记录 SQL Server 用触发器实现表的历史记录 WEB打印大全 asp.net操作Excel总结 VC++开发BHO插件——定制你的浏览器  作者 陆其明 如何实现在Asp.net下XP风格的下拉菜单 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同(很久没来了 作为国庆礼物给大家了) Js控制ASPX页面刷新的土办法 代码生成工具之MyGeneration 初次体验.net Ajax无刷新技术 Community Server专题八:MemberRole之Membership 应用IBatisNet+Castle进行项目的开发 .Net PetShop3.0的数据访问技术及其改进 Community Server专题七: Job & Timer 使用企业库在某些站点会报试图执行安全策略不允许的操作异常的解决方法。 刚注册,先转发一片文章:在 ASP.NET 中执行 URL 重写 利用asp.net 2.0构建企业级门户平台(1、设计思想) 利用asp.net 2.0构建企业级门户平台(2、实现页面请求的调度) 报表的开发利器-ExcelQuicker ExcelQuicker模板功能的高级应用示例——薪资报表 SQL Server未公开的两个存储过程 WSE--简介(一) .net WebControl 处女作,用于导航的Tree控件(不敢说用起来最简单也算得上非常简单,呵呵) xml数据岛,xsl,javascript,asp.net 的结合使用 web 程序模仿 windows 资源管理器 用CodeSmith生成数据库实体类的代码 .NET中统一的存储过程调用方法(收藏) TreeView常用操作 NHibernate学习 NHibernate学习 给SQL Server存储过程,传送数组参数的变通办法 Community Server专题二:体系结构 权限设计(二) 通用分页存储过程 N-Tier Server/(Smart)Client 应用程序的设计和开发 基于身份验证票据的权限系统的实现之源代码篇 Enterprise LibraryV1.0-数据应用程序块 共享自动生成DTO/DataAccess/BizObject的CodeSmith模板 一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字 Forms验证中的roles 跨页面的多选功能实现 简单说一下我对这个CRM系统的设计方案哦 把你的Access数据库嵌入到资源中发布 对象界面映射(UI Mapping)——Mustang1.0.0.0写完了!!! 蛙蛙推荐:利用OWC创建图表的完美解决方案 SQLServer 工具箱v1.3(SQL脚本排序,日志清除,数据导入导出)附完整源代码 从WEB SERVICE 上返回大数据量的DATASET 批量字符串替换程序 install shield X 打包 .net Framework ASP.NET直接下载一个文件,而不是在IE中打开它 实现GridView控件的删除多条记录功能系列(1) ComponentArt WebUI For asp.nET 2.1,So Good Asp.nET UI Control! 实现GridView控件的删除多条记录功能系列(2) 博客园 Google广告 开源项目 实现GridView控件的删除多条记录功能系列(3) ICSharpCode的SharpZipLib最新0.84版本 SmartDBForge-智能数据库工厂 2005预览版:自动化生成数据库文档、SQL脚本、实体类等,支持多种数据库 提供一个实体类生成工具. T-SQL 存储过程: (20050802修订版) 根据基本表结构及其数据生成 INSERT INTO ... 的 SQL 关于单点登陆的一些问题 蛙蛙推荐:微软MSDN导航菜单演示(Javascript+CSS2) 蛙蛙推荐:远程抓取网页到本地数据库.doc CuteEditor破解手记 [分享]FCKEDITOR范例及中文使用说明 [DNN模块开发]模块的文件结构及命名方法 用好CodeSmith,提高生产力,CodeSmith技术原理初探. Smart Client学习体会(一) 优秀.net 控件包介绍 应用系统架构设计 如何在删除并重新安装 IIS 之后修复 IIS 映射 五种常见的ASP.NET安全缺陷 “他说,你那样做,太累,而且如果字段变了,还要维护” 纯脚本搞掂DataGrid表表头不动,表身滚动。 DataGrid分页中文效果,与大家共享,顺便有能者把DropDownList的触发找到。我是放在呈现上。 基于文件格式的DataGrid多媒体播放示例(带表头自动排序,动态播放列表功能) Office自动化开发中的事件编程 ExcelQuicker模板功能的高级应用示例——薪资报表 抄:JavaScript实用技巧集锦 [分享]新封装的一个实现无刷新连动下拉列表类(最新版本) 新鲜出炉,几分钟以前刚刚完成,一个带自定义分页,排序功能的DATAGRID控件(公开源码) C#操作Excel,套用模板并对数据进行分页 Asp.Net Forums与现有系统整合方案示例 存储过程中的事务实现 基于Active Directory的用户验证 Sql server数据库记录修改追踪和恢复的解决方案 SQL Server最新补丁与工具大全--数据库管理员必看 介绍一种Web上打印技术 表单验证代码(转载) 在Webpart中以Post方式提交数据到SharePoint站点 ASP.NET2.0中用Gridview控件操作数据 一个有用的oracle数据库访问封装类 【经验分享】海量数据高性能分页新法 MSDN: 设计数据层组件并在层间传递数据 真的需要在.NET中使用WIN32 API的朋友,这里是你的宝库 服务器升级安装操作备忘[原创] WEB柱状图和折线图控件,大家应急时可以用用 RapidTier 1.0 beta2 发布 关于设置WebControls里的treeview控件的图片路径 两分钟让你明白什么是ERP! 权限控制理论及实现 纯脚本搞掂DataGrid表表头不动,表身滚动。 NHibernate 使用手迹(2nd) ASP.NET服务器控件开发简介: ComboBox [开放源代码] 用存储过程生成单据号 [开源论坛]StellaForum v 2.0 公开 NHibernate使用的问题 使用NHibernate时需要考虑的另一个问题 使用 DataAdapter 和 DataSet 更新数据库 绝对适合您的DataPropertyGrid! 关于BI Portal(一) 也谈log4net 1.2.9 beta的使用(web 项目) datagrid(webform)批量操作的一些思路。 将TreeView存储、写入数据库的扩展类TreeViewEx 一句SQL语句解决倒序数据分页提取 一个 TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件 解放程序员的验证输入(II) 用好CodeSmith,提高生产力,CodeSmith技术原理初探. 最近开发一个SQL server大数据量统计系统的经验总结 SQL语言高级技法演练 动态载入数据的无刷新TreeView控件(5) 动态载入数据的无刷新TreeView控件(4) 在ASP.Net中两种利用CSS实现多界面的方法. SQL Server数据汇总完全解析 asp.net学习资源列表 将TreeView存储、写入数据库的扩展类TreeViewEx .NET平台下WEB应用程序的部署(安装数据库和自动配置) 在sql语句中替换Not In 的方法 创建新的企业级模板 SQL Server游標應用技巧一例 送给所有还未买房的技术朋友们——住房按揭贷款计算器 基于Wiki的网络协作/知识积累试验平台 快过年回家了,发点实用的东西给大家 .NET商业应用架构所要解决的若干问题(原创) 企业设计模式读书笔记 Domain Model MAVERICK.NET初窥(原创) 再谈SQL Server表与Excel、Access数据互导 使用Singleton改善ASP.NET性能备注 石头.net [杨 云] 也来说说asp.net页面之间传递数据 Vs ColdFusion 一套可嵌入或独立使用的翻页控件: WebPager(附源码) Rainbow分页解决方案 我对多类型用户的设计想法...... 为什么叫“老师” 和 “学生” 生成工具-CodeSmith-享受编程的乐趣(三) 生成工具-CodeSmith-享受编程的乐趣(二) 生成工具-CodeSmith-享受编程的乐趣(一) 在ASP.NET中使用NHibernate 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记) 一个NHibernate应用的实际例子(A good open source project to learn how to use NHibernate) 客户自行更改了aspnet用户权限,结果整个网站不能用。查找了资料记录下来 数据分页显示大搜索 CNBlogs引用第三方组(控)件明细^_^ 使用HttpContext的User属性来实现用户验证 近音搜索,比较输入Z就可以搜索到拼音Z开头的汉字,搜索"浙江",只要输入"ZJ"就可以了 看了下面那篇“Crack别人应用程序”的文章有感,简述.Net下的应用程序授权。 子查询基础知识 我用Rainbow做网站 将TreeView存储、写入数据库的扩展类TreeViewEx Dottext中的配置 提高ASP.NET应用程序性能的几招方法 一定要记住:Page.IsPostBack 不能忘。。。 log4net 配置与应用 浅析《ASP.Net Web 站点高级编程》的登录验证! 开源的数据库组件 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限) 老猫的理想开源小范例 [精华&原创]可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) IEWebcontrol webctrl_client目录配置 FMStocks7 , 不错的一个.NET 示例程序 感受DataGrid给数据操作带来的便利(4) 感受DataGrid给数据操作带来的便利(5) 中国DNN 的邀请 感受DataGrid给数据操作带来的便利(6) DotNetNuke(DNN)从入门到进阶(1)-怎样写自己的模块 如何实现文本框焦点自动跳转及通过回车键提交表单 如何使用一个不错的图表组件WebChart(免费) .NET下,你采用的是哪种方式进行数据操作? 两种不同情况的分页实现 .NET下,你采用的是哪种方式进行数据操作? 常用SQL说明 可以动态分页的存储过程 [专题]O/R 实体关系映射 我的IBatisNet的Demo DNN官方说明2 Duwamish代码分析篇 SQL Server数据库备份还原 通用分页SQL SQL过程自动C#封装,支持从表到基本存储过程生成, DNN的白皮书(官方说明) SQL Server自动备份的SP, 只要加上数据库名, 和路径即可. Rainbow中的不过期分页的文章Module 点击一个Button,来看Duwamish7的总体层次 我在研究的一些.net开源项目 回头看.Net的优点与进步 方便好用的 ASP.Net 错误记录发布模块 ELMAH (Error Logging Modules And Handlers) 我用Rainbow做网站 实现千万级数据的分页显示--整理资料并测试 小技巧之——服务器端变量与客户端JScript脚本变量的互操作。 Asp.net(C#)实现验证码功能 SQL 2000中的触发器使用 NHibernate 空气是哪么的清新,世界是多么的美好 NHibernate 做个小项目来试一下吧 三 NHibernate 做个小项目来试一下吧 四 (我们继续) 博客园的开源项目: Aop.NET DotNetAOP ibatis介绍[转贴] 使用open source产品组装你的web应用架构[转贴,只作为收藏,非本人原创] 发现不少免费、酷、强大组件(Win/Web) NHibernate 做个小项目来试一下吧 一 NHibernate 做个小项目来试一下吧 一 NHibernate 空气是哪么的清新,世界是多么的美好 用Nhibernate怎么实现数据的添加、删除、修改简单程序 利用webService做系统间数据整合 Rainbow的安装 我想问一下NHibernate的问题??? NHibernate学习第二天(在nhibernate中执行SQL语句 ) NHibernate学习第一天(数据的写入 Insert) 好久没有见到有人谈论代码生成器了 几个开源项目实体层实现方式比较 象使用DataGrid一样使用DataList(包含分页) 一个对众多CMS(内容管理系统)进行比较、评论的网站 在Windows下让不同用户使用不同的分辨率(C# 2005) 数据分页 DotNetNuke:如何创建自己的模块(FlashPlayer Module) SharpDevelop代码分析 (一、序+基本概念) 发布Asp.Net Forums V2 中文官方 10.1 国庆版 号外!激动人心的DotNetNuke(DNN)2.2x新特性最新汇报! DotNetNuke:制作属于我们自己的Skin sql server中分页获取数据的存储过程 轻量级的数据库访问类 DotNetNuke:自动升级功能(一) DNN第三方贡献 CodeProject上最近(2004-09-24)发现的几个好代码 使用Reflector工具解决问题 关于Rainbow的一些思考 FreeTextBox的ToolbarButton整理 web的用户验证方式 SqlServer通用存储过程的编写 我将msdn上一篇关于数据库打包的文章由vb改为cs拉,好久没发言了,希望这个东西对大家有用! DotNet(.Net)下构建高适应性的三层架构 DotNetNuke:自动升级功能(序) 关于PagedDataSource,非常好用的一个分页属性! IronPython的第一块鳞片 关于Rainbow的一些思考 柱状图改进版 CN.Text开发笔记—利用反射将数据读入实体类 布局和配色(Rainbow的Design目录) 存储过程编写经验三 存储过程经验二 扩展AdRotator控件,让它支持.SWF广告 (源码) 描述 Machine.Config 和 Web.Config(转载) sqlserver 海量数据导入的最快方法 Community 学习(C#版) DataGrid使用<2> 绑定checkbox [百万级]通用存储过程.分页存储过程. 实现千万级数据的分页显示! 今天把最近看DotNetNuke的心得写一些,希望对别人有所帮助 DNN(DotNetNuke)研究手札系列2-背景、现状 win2003优化大全 (转载) DNN(DotNetNuke)研究手札系列1-资源 DotNetNuke 2.1.2安装指南 DataGrid资料 DataGrid技巧大集合  asp.net速查手册 GridView/DataGrid单元格不换行的问题 如何在GridView中使用DataFromatString VS2005新控件之GridView 使用高级技巧系列[一][视频] VS2005新控件之GridView 使用高级技巧 几个.Net开源的CMS、Portal系统 gridview中加弹出窗口用例 GridView&DetailsView对XML文件增删改 [译]Scott Mitchell 的ASP.NET 2.0数据教程之十一: 基于数据的自定义格式化 初谈ADO.NET中利用DataAdapter进行数据操作 单一登录 Web 应用程序的企业级安全系统 发布XenoCode 2006 for DotNet 2.0破解程序 IBatisNet+Castle构架开发指南 IBatisNet+Castle构架开发指南 (续) 附代码生成模板 GridView根据值的变化改变行列样式 使用ASP.NET 2.0中的GridView控件 我积累的数据库操作类(ASP.NET) 我积累的数据库操作类(ASP.NET) 我积累的数据库操作类(ASP.NET) GridView 控件编程的事件 css+div布局总结--新手入门 15分钟内快速构建数据访问层(翻译) Transact_SQL小手册(各种sql语句大集合) Exports datatable to CSV or Excel format [转贴]开发VS2005下ComboBoxTreeView(下拉列表框弹出树) 与ToolStripComboBoxTreeView(下拉列表框工具条弹出树) 使用配制文件定制身份验证和基于角色的安全 一句SQL得出表中重复的数据(TMP) SQL精妙语句 Asp.net2.0:如何使用ObjectDataSource(配合ORM) Sql Server数据库的备份和恢复措施 SQL Server2000数据库文件损坏时如何恢复 存储过程编写经验和优化措施 (转) 征集佳句-精妙SQL语句收集 利用WebBrowser彻底解决Web打印问题 各种sql语句大集合 自定义用户访问权限 DataGrid导出excel和word的例子 具有滚动条的div SQL Server 2005 Express 附加的数据库为“只读”的解决方法 Sql 导入/导出Excel 不走寻常路 设计ASP.NET应用程序的七大绝招 ASP.NET性能优化 ASP.NET性能优化 对数据库Sql Server常用操作类库SQLHelper 如何取出treeview中checkbox的值 海量数据库的查询优化及分页算法方案 使用配制文件定制身份验证和基于角色的安全 VS2005新控件之GridView 使用高级技巧系列[二][视频] 一条经典的汇总的sql sql Server 索引优化 (转) Log4Net使用指南 一些有用的sql语句实例 Enterprise Library 2.0 -- Data Access Application Block 在Excel中将连续多列相同数据项合并 执行SQL存储过程事事例 SQL宝典 SQL语句导入导出大全(轉,收藏用) gridview中手工排序 Asp.net 项目中引入Nhibernate 入门(一) 利用asp.net 2.0的客户端回调功能制作下拉框无限级联动 给大家推荐一个我的开源项目: Permission Base 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表) IBatisNet基础组件 用javascript将数字转换为中文大写 asp.net的TextBox回车触发事件 利用Sql作业在asp.net 里面实现异步调用存储过程. 抓取Web网页数据分析 VS2005中如何动态设置数据库连接信息? GridView控件修改、删除示例(修改含有DropDownList控件) JavaScript有用的代码,摘抄自:http://bbs.tech.163.com/board/rep.jsp?b=tech10&i=1296&p=0 [转] 一些sql语句的详细解释 DataGrid使用心得(附大量代码) [转] SQL Server中各个系统表的作用 使用 Web Services Enhancements 2.0 的基于角色的安全性 Flash+asp.net打造FLASH首页新闻发布 SQL存储过程事务和优化方法(包括查询方式语句结合) 小记存储过程中经常用到的本周,本月,本年函数 GridView Css ASP.NET 2.0 Language Swithcer and Theme Swiche ASP.net2.0学习资料汇总 触发器与约束的适用条件 GRIDVIEW 中当数据行数未满时,填充空白行 ComponentArt Web.UI for ASP.NET 2.X序列号 创建用于监视对student表进行插入和更新操作的触发器 20060516: 实现圆角div效果 .net绝对技术资料 sql server2000中使用convert来取得datetime数据类型样式(全) 一些sql 语句(行列转换等) [转载] Owc的使用---自己封装好的类可以实现14种分析图 非常經典的WEB列印方案 CuteEditor 5.0 的使用 ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) MD5算法的T-SQL实现 ASP.NET2.0中数据源控件之异步数据访问 DotNetGrid 控件下载 DotNetGrid 介绍 WEB打印-------我的搜集 在校生数据导入范例 关于多极分类的几个存储过程 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表) 树形数据查询示例 转 SQL Server 数据库管理常用的SQL和T-SQL语句 IIS状态代码的含义 .NET平台下带权限控制的TreeView控件节点生成算法(转载) 实现HTTP内容的抓取 给SQL Server存储过程,传送数组参数的变通办法 在.net中使用Fckeditor [转] SQL的3种连接查询 海量数据库的查询优化及分页算法方案 [转] transact---sql高级查询(下) [转] transact---sql高级查询(上) SQL Server数据库开发的二十一条军规 Excel编程 存储过程语法 SQL 语法参考手册 ASP.NET之精通弹出窗口 在网页中插入视频播放代码全集 无限级分类的实现 资源名称资源名称取得汉字字符串的拼音首字母的mssql函数 树_ajax 树_ajax GridView与DataGrid中的数据项访问差别 Gridview中onmouseover的效果 ASP.NET2.0+SQL Server2005构建多层应用(转载) 修正过的通用分页存储过程 [推荐]网络上通用的调查答卷系统-XML做数据库(将DataSet转化成字符串) MS-SQL数据库开发常用汇总 在visualStudio里面使用SqlServer2000作为数据源 获取影响行数和ID的存储过程 C# .Net中的类型转换 C#.net常用函数 SQL注入 FCKeditor2.2+ASP.NET2.0不完全攻略 FCKeditor2.2+ASP.NET2.0不完全攻略 【转贴】datagrid数据导出到excel文件给客户端下载的几种方法 GridView动态生成模板列 关于树形控件 asp.net 备份和恢复SQL SERVER 数据库 Asp.net(C#)实现验证码功能 Asp.NET程序中常用的三十三种代码 分割以逗号作为分割符号的字符串并插入到表中 列出一个表中的某个字段重复的记录 DataGrid系列技巧(导出excel,事件,多种方式呈现数据,全选全删)等等等 把以"文本文件(制表符分割)"保存的EXCEL文件导进SQLSERVER2000的DEMO! 总结:ADO.NET在开发中的部分使用方法和技巧 (转贴) DATAGRID的全选/取消全选控制(CHECKBOX) 使用SqlBulkCopy类加载其他源数据到SQL表 使用SqlBulkCopy类加载其他源数据到SQL表 使用SqlBulkCopy类加载其他源数据到SQL表 一个调查实例<主要训练向panel中添加控件>包括全部代码 ASP.NET 2.0客户端回调的实现分析(3)[ZT] [原创]把SQL的动态查询改成SQL查询 SQL Server实用经验技巧集 使用 DataAdapter 执行批量更新 treeview的建立,更新,删除 C#实现web信息自动抓取 [收藏].net关于企业Excel报表的生成 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转) .NET进销存系统开发笔记------之Gridview应用 .net 2.0中GridView无限级嵌套的实现 导入Excel电子表格数据到SQLSever数据库的另一种方法 一个购物车的简单实现(多层开发) ASP.NET2.0中 TreeView 和ORACLE 数据绑定的一种方法 ASP.NET2.0 ObjectDataSource的使用详解(2) ASP.NET2.0 ObjectDataSource的使用详解(1) 将DataSet更新自动提交到数据库工具类实现 超强扩展性的DNN-DotNetNuke模块功能分类列表(from 中国DNN) 世界上主要的一些搜索引擎 SQL Server 数据库管理常用的SQL和T-SQL语句 Transact SQL 常用语句以及函数[个人推荐] Survey Admin 示例:实现 Microsoft .NET 基于角色的安全性(转) NHibernate Step by Step (四)Session、Query及HQL NHibernate Step by Step (三) Configuration和Sessionfactory Microsoft .NET Pet Shop 4 架构与技术分析 PetShop的系统架构设计 Asp.Net 2.0 TreeView的Checkbox级联操作 无废话-SQL Server 2005新功能(1) - TSQL 导出导入Excel(DataSet,DataGrid) DNN开发中的一些细节(1) DNN开发中的一些细节(2) ASP.NET2.0: Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码] TreeView 爱恨之间 Transact SQL 常用语句以及函数 Transact SQL 常用语句以及函数 ASP.NET 2.0 正式版中无刷新页面的开发 DNN开发中的一些细节(1) ASP.NET2.0快速入门--高级数据方案(3) 结合CodeSmith开发和调试DNN3模块 SqlDataSource WEB控件:当DeleteCommandType="storedProcedure"时 关于TreeView控件专题 利用Treeview做权限树的一种方法 利用Treeview做权限树的一种方法 (新)在ASP.NET中调用存储过程传参数 ASP.NET2.0快速入门系列--高级数据方案(上) ASP.NET2.0快速入门--高级数据方案(中) asp/asp.net中遍历树型结构. ASP.NET 2.0中使用multiview控件 ASP.NET2.0快速入门系列--高级数据方案(上) DataGrid,GridView和DetailsView中添加删除确认提示 VS2005中用Code Snippets提高开发效率 IIS和ASP.NET2.0 关于vs 2005的一个问题, 解决The path "xxxx' maps to a directory outside this application, which is not supported. VS2005第一天 Failed to access IIS metabase 无ASPX文件部署(续) ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署 对vs2005生成dll文件的一点疑惑 ASP.NET 2.0 新特性 WEB Service 下实现大数据量的传输 switch your web application project to use development machine's IIS server [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转载) GridView 控件使用不完全指南! 【原创】asp/asp.net中遍历树型结构. .NET Pet Shop 4.0案例研究预览篇 关于树形结构的研究的资料收集 单点登录(SSO)的核心--kerberos身份认证协议技术参考(三) Gridview:在进入编辑模式后动态添加控件 ASP.NET中大结果集的分页[翻译] Asp.Net Forums研究文章集合(收藏) ASP.NET2.0中Gridview中数据操作技巧 SQL Server中利用存储过程来高性能地进行分页 关于二级域名Cookie的问题及解决方法 一步一步建网-2-DotNetNuke4-5/6-杂项/感! 通过系统配置来提高ASP.NET应用程序的稳定性 GridView 控件使用不完全指南!(续一) ASP.NET应用程序的部署--兼谈aspnet_compiler.exe命令 RDLC报表(一) RDLC报表(七) GridView 控件使用不完全指南! DNN皮肤制作 一个登陆页面,包含了初始化用户,输入检测,错误处理等 DNN皮肤制作 基于dotnetnuke的网站全新上线! [导入]DotNetNuke Skin 與 Container 設計介紹 CodeSmith3.0开发资料下载 CodeSmith开发系列资料总结 提高SQL执行性能方案:如何让你的SQL运行得更快zt Visual Studio 2005 的101个示例下载 网络数据库挖掘程序的设计 对联广告代码效果大全 网站生成静态页面,及网站数据采集的攻、防原理和策略 [原创]终极防范SQL注入漏洞! 【先锋海盗类】Ver2005 完美版 拿别人的新闻来用,虽然我知道这样不好,还是用了。。。 网页小偷程序ASP.net 数据采集程序(网页小偷)点滴心得 部署安装时写入SQL SERVER和Web.config 将博客园程序从Visual Studio 2003迁移到Visual Studio 2005的尝试 开篇:Nhibernat.Test项目分析之:ConfigurationTest 基于NHibernate的三层结构应用程序开发初步 15分钟内快速构建数据访问层(翻译) Asp.net 2.0专题二:本地化(Localization) 数据库应用基础系列 深入了解 SQL Server 2000 与 ADO.NET 中的事务隔离及数据锁定 第2章 并发操作的一致性问题 (2) 在asp.net 2.0中使用SqlBulkCopy类迁移数据 使用asp.net 2.0和SQL SERVER 2005构建多层应用 推荐个关于 team system教学的好站点 推荐个关于 team system教学的好站点 DataList控件也玩分页- - SQL Server 两个触发器例子,大家看看怎么样? 发布一个原创的基于Ajax的通用(组合)查询(续) 在IIS6.0下ASP .NET 的版本冲突问题 FCKeditor应用小记--起步篇 WEB Service 下实现大数据量的传输 菜单控件 55种网页常用小技巧(转载) [转]Microsoft PetShop 3.0 [转载]用WSE在Web服务中验证用户身份 一次SQL Server 2000修复实践的说明 新数据网格DataGridView简介(转自MSDN) [转贴]Visual Studio 2005常用插件搜罗 第 4 章 构建以数据为中心的应用程序 网 站 策 划 [转载] 在.net安装程序部署SQL Server数据库 [转载] 在.net安装程序部署SQL Server数据库 ASP.NET程序中常用代码汇总(一)(转载) ASP.NET程序中常用代码汇总(二)(转载) ASP.NET程序中常用代码汇总(三)(转载) ASP.NET程序中常用代码汇总(四)(转载) ASP.NET程序中常用代码汇总(五)(转载) 露雨资源库(第一个.net2.0软件)二 ADO.NET 2.0 大批量数据操作和多个动态的结果集   本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2008/01/20/1045957.html,如需转载请自行联系原作者
文章
SQL  ·  Web App开发  ·  .NET  ·  C#  ·  数据库
2017-11-26
仿163网盘无刷新多文件上传系统
这个仿163网盘无刷新多文件上传系统,并没有用使用.net的控件,完全的手工制作。前台基本上是静态的,跟后台没有关系,所以后台用什么语言做都可以(后面有各个版本的实例下载)。 本来觉得这个系统会很复杂,但把每个部分都分析清楚后,其实需要的技术并不高。不过当我把各个功能函数都整理好准备进行封装时,却发现要把程序封装不是那么容易,因为程序跟html的耦合度太高。然后我逐步把程序中操作html相关的部分分离出来,首先把简单的分离,接着是文件列表,然后是file控件,最后是一些提示性程序。经过几次尝试才把整个结构封装好,现在程序结构应该算比较清晰,有什么不明白的地方欢迎留言。 效果预览 这里的预览只是前台的效果,要整个系统测试请下载完整实例。 程序说明 【无刷新上传】 要实现文件上传,form必须设置几个属性: 1.action:设为要处理数据的页面地址; 2.method:设为"post"; 3.enctype/encoding:必须设为"multipart/form-data",这里要注意的是在ie中用js修改form的enctype属性是没有效果的,只能修改encoding; 后面两个属性程序初始化时都有设置: this.Form.method = "post";this.Form.encoding = "multipart/form-data"; 要注意这里的无刷新不是ajax哦,而是利用“古老”的iframe。 由于ajax提交数据必须先获取数据,而js(一般情况下)是不能操作客户端文件,要获取文件数据就更不用说了,所以只能用iframe来做。 先说说iframe实现无刷新上传的原理:利用form的target属性,把数据提交到页面中一个(通常为隐藏的)iframe上。直观点说就是把“刷新”留给iframe。 其实原理跟一般用iframe实现无刷新提交表单是一样的,只是这里换成是文件。 这里关键就是把form的target设为iframe的name: this.Form.target = this._FrameName; 【iframe】 如果没有自定义iframe,程序在初始化时会自动创建无刷新所需的iframe的。 首先必须选择一个iframe名,这在无刷新时是必须的,为了每个实例能创建各自的iframe,这里用了一个随机数: this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000); 也可以用一个递增的计算器来代替随机数。 接着创建iframe,本以为用document.createElement("iframe")创建再设置它的name属性就行了。 却发现这样设置的name在ie居然不认(有说name是只读属性),还好在网上找到一个方法:“IE 创建元素,还有一个特点,就是可以连同属性一同创建”。 例如我想给动态创建的iframe设置name,可以这样: document.createElement("<iframe name=\"" + this._FrameName + "\">") 不过这个方式在ff会报错: uncaught exception: String contains an invalid character (NS_ERROR_DOM_INVALID_CHARACTER_ERR) 估计是用createElement时不能带name,标准应该也是这样,所以兼容的方式这样写: var oFrame = isIE ? document.createElement("<iframe name=\"" + this._FrameName + "\">") : document.createElement("iframe");//为ff设置nameoFrame.name = this._FrameName; oFrame.style.display = "none"; 关于这方面更详细的内容请看这里。 创建完还需要插入到body中,一般的做法是使用document.body.appendChild,但在ie中会有“已终止操作”错误,可以用下面这段代码测试: <body><div><script> document.body.appendChild(document.createElement("div"));</script></div></body> 网上找到一个解析:“原来FF下的实现机制是当页面还没有完全读取完时body元素就已经存在了,而IE只有页面完全读取结束body元素才会存在,所以在页面中插入上面这条语句在IE下就会出现错误”。 我在web开发未解之谜中也提到了这个现象,我这里使用了insertBefore代替: document.body.insertBefore(oFrame, document.body.childNodes[0]); 在服务器端文件传送完(或失败)之后,怎么通知客户端呢? 这里说说我的方法,首先我在客户端定义一个函数: function Finish(msg){ alert(msg); location.href = location.href; } 很简单,就是显示提示并重新加载页面(如果使用reload会导致ff中iframe重复加载数据)。 那服务器端如何通知客户端的问题,就是iframe如何跟主页面交互。 答案是通过window.parent或window.top,在iframe中parent和top属性“分别返回立即父窗口和最上层的祖先窗口”。 例如我在服务器端处理完数据之后会输出: context.Response.Write("<script>window.parent.Finish('" + _msg + "');</script>"); 就会执行主页面的Finish函数了。 【多文件上传】 对于多文件上传,这里的目的是如何做到163网盘那样,只用一个file控件就实现多文件上传。 这里参考了163网盘的思路,下面说说如何实现: 首先必须有一个文件空间(我自己定的名字),例如程序中的"idFile"对象,这个空间不需要内容甚至一个div就可以,主要是用来存放file控件,程序中Folder属性就是这个文件空间对象。 ps:这里的要求是把file控件都控制在文件空间里,即使不是单file控件的情况。 再说说Files属性,这个属性放的是file控件集合,方便获取file控件,在下面“文件列表”就会用到。 处理这些file控件的程序主要在Ini函数中: 首先是处理文件空间中的file控件: this.Files = [];//整理文件空间,把有值的file放入文件集合Each(this.Folder.getElementsByTagName("input"), Bind(this, function(o){     if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); } })) 可以看到这里主要是把file控件放入到Files中,并执行附加函数onIniFile,我是这样定义这个函数的: onIniFile: function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); } 这里为了实现单file控件,把原来有值的file都隐藏了,还有那个“单file控件”呢? 别急,接着就在文件空间插入一个新的file控件: var file = document.createElement("input"); file.name = this.FileName; file.type = "file"; file.onchange = Bind(this, function(){ this.Check(file); this.Ini(); });this.Folder.appendChild(file); 可以看到file控件的name是FileName属性的值,默认是空的,如果服务器端需要这个name的话就可以设置。 这里可以看到每个file控件都有onchange来执行检测函数Check,这样每次选择文件后都会用Check检测一次,这里说说这个Check函数: //检测变量var bCheck = true;//进行空值、文件数、后缀名、同值检测if(!file.value){     bCheck = false; this.onEmpty(); } else if(this.Limit && this.Files.length >= this.Limit){     bCheck = false; this.onLimite(); } else if(!!this.ExtIn.length && !RegExp("\.(" + this.ExtIn.join("|") + ")$", "i").test(file.value)){     //检测是否允许后缀名    bCheck = false; this.onNotExtIn(); } else if(!!this.ExtOut.length && RegExp("\.(" + this.ExtOut.join("|") + ")$", "i").test(file.value)) {     //检测是否禁止后缀名    bCheck = false; this.onExtOut(); } else if(!!this.Distinct) {     Each(this.Files, function(o){ if(o.value == file.value){ bCheck = false; } })     if(!bCheck){ this.onSame(); } } 里面有一个检测变量bCheck,然后进行空值、文件数限制、后缀名、相同文件的检测,当其中一个步骤不通过bCheck就会设为false,一个常用的检测结构。 这里说说检测后缀名,由于js不能像后台那样获取文件的文件类型,所以只能根据后缀名来判断,例如用正则判断: /\.(jpg|gif)$/i.test(file.value) 这样判断显然是不够的,所以如果要做文件类型判断的话一定要在后台用ContentType再判断一次。 最后如果没有通过检测就会执行onFail函数: !bCheck && this.onFail(file); 我在onFail函数中设定了移除没有通过检测的file控件: onFail: function(file){ this.Folder.removeChild(file); } 这样就基本实现(正确的说是模拟)了单file控件上传多个文件的效果了。 【文件列表】 在上面的Ini函数中,最后执行了一个附加函数onIni,这个函数是用户自己定义的,我就在这个函数中添加文件列表。 在之前先说说添加文件列表的函数AddList,这个函数是用来把file控件的值列在一个table里面。 函数的参数是一个二维数组,其中第一维是行(tr),第二维是列(td)。 首先获取列表对象FileList,再定义一个文档碎片oFragment来操作dom: var FileList = $("idFileList"), oFragment = document.createDocumentFragment(); 然后用两个Each把二维数组插入到文档碎片中: Each(rows, function(cells){     var row = document.createElement("tr");     Each(cells, function(o){         var cell = document.createElement("td");         if(typeof o == "string"){ cell.innerHTML = o; }else{ cell.appendChild(o); }         row.appendChild(cell);     });     oFragment.appendChild(row); }) 其中用了一个判断if(typeof o == "string"),如果是文本就直接用innerHTML插入td,如果不是文本(这里不是文本就是一个对象)就用appendChild插入到td。 当数据都插入到文档碎片,就准备把文档碎片插入到FileList中,不过还有一个步骤就是清空FileList中原有的数据。 本来把innerHTML设为空来清空FileList会更有效率,但ie的table中只有td支持innerHTML,所以只好用removeChild来清空: while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); } 之后就可以把文档碎片插入了: FileList.appendChild(oFragment); 继续看onIni函数,现在只需要把要显示的数据组成一个二维数组,再用AddList就能显示文件列表了,这时存放file控件集合的Files属性就大有用处了。 首先定义一个放显示数据的数组: var arrRows = []; 然后根据Files对这个数组赋值: if(this.Files.length){     var oThis = this;     Each(this.Files, function(o){         var a = document.createElement("a"); a.innerHTML = "取消"; a.href = "javascript:void(0);";         a.onclick = function(){ oThis.Delete(o); return false; };         arrRows.push([o.value, a]);     }); } else { arrRows.push(["<font color='gray'>没有添加文件</font>", " "]); } AddRow(arrRows); 当Files没有控件时只是输出“没有添加文件”,有控件时就会把每个file控件的要显示数据放到一个数组中,可以看到这个数组其实就是td内容的集合,接着把这个数组加入到arrRows中形成二维数组,最后把得到的arrRows给AddRow函数显示数据就行了。 为了能取消指定的file控件,这里插入了一个a来触发删除函数Delete,这里也有一个技巧,这里把href设为"javascript:void(0);",并在onclick中返回false,这样能最大程度的实现仅仅执行js而不去跳转。 在表单提交时也要重新显示文件列表,表单提交后就不允许删除文件了,只显示文件路径就行了: $("idBtnupload").onclick = function(){     //显示文件列表    var arrRows = [];     Each(fu.Files, function(o){ arrRows.push([o.value, " "]); });     AddList(arrRows);          fu.Folder.style.display = "none";     $("idProcess").style.display = "";     $("idMsg").innerHTML = "正在添加文件到您的网盘中,请稍候……<br />有可能因为网络问题,出现程序长时间无响应,请点击“<a href='?'><font color='red'>取消</font></a>”重新上传文件";          fu.Form.submit(); } 说到表单提交要注意一个问题,就是表单是不能嵌套的,最好是把表单放到服务器表单之外,没有办法才使用服务器表单作为提交表单(由于程序会修改提交表单的属性,所以尽量不要这样使用)。 这样文件列表就完成了,有兴趣的话也可以自己封装一下这个功能。 【file样式】 到此,程序的功能都已经实现了,但在163网盘中还有一个特别的地方,就是file控件的样式。 如果有用过163网盘上传文件,就知道那个file控件就像一个按钮,但功能确实是一个file控件。 但当自己尝试修改file控件的样式时,发现单单设置file控件的样式并不能实现想要的效果。 于是我想了另一个办法,用一个button来模拟,结果发现也不行,用js根本操作不了file控件,应该是考虑到安全问题吧。 最后是参考了163网盘和muxrwc模拟126附件添加的效果,总结了这个方法: 1.指定用一个容器(例如程序中的idFile)。 容器最好指定高和宽,并且overflow为hidden,不是块级元素的最好设display为block(为了高和宽的正确呈现); 2.在容器里放一个file控件,并设置样式,使能触发弹出选择文件框的部分覆盖整个容器,并设置成全透明。 容器指定准确的高和宽就是为了能通过file控件中不多的能设置的样式来覆盖整个容器; 3.现在已经把容器模拟成file控件了,可以直接设置容器的样式来模拟设置file控件的样式了。 在程序中主要用file控件的margin-left和font-size来实现覆盖整个容器: a.files input {     margin-left:-350px;     font-size:30px;     cursor:pointer;     filter:alpha(opacity=0);     opacity:0;} 至于容器,我使用了有伪类hover的a元素(虽然CSS2中hover可以应用于任何对象,但ie6不支持)。 这里用了一个常用的小技巧,就是用一张图片作为背景通过在hover时修改background-position来实现两张图片的效果: a.files {     width:90px;     height:30px;     overflow:hidden;     display:block;     border:1px solid #BEBEBE;     background:url(img/fu_btn.gif) left top no-repeat;     text-decoration:none;} a.files:hover {     background-color:#FFFFEE;     background-position:0 -30px;} 在点击这个a时后会出现一个虚线框,在这里显然不太美观,可以把outline设为none来去掉,可是ie又不支持,在网上找到一个方法ie可以把hideFocus设为true来隐藏聚焦(即不显示这个虚线框,hideFocus可以在js或html中设置,也可以通过expression放到css中: a.files, a.files input {     outline:none;/*ff* /     hide-focus:expression(this.hideFocus=true);/*ie* / } 这样完全模拟了163网盘的效果了。 【后台】 前台基本完成了,就到后台啦。后台的功能很简单,就是处理传递过来的文件数据。 这里像js + .Net 图片切割系统那样使用ashx文件处理IHttpHandler发送过来的数据。 程序很简单,就直接贴代码了: int iTotal = context.Request.Files.Count;if (iTotal == 0) {     _msg = "没有数据"; }else {     int iCount = 0;     for (int i = 0; i < iTotal; i++)     {         HttpPostedFile file = context.Request.Files[i];         if (file.ContentLength > 0 || !string.IsNullOrEmpty(file.FileName))         {             //保存文件            file.SaveAs(System.Web.HttpContext.Current.Server.MapPath("./file/" + Path.GetFileName(file.FileName)));             //这里可以根据实际设置其他限制            if (++iCount > UploadFileLimit)             {                 _msg = "超过上传限制:" + UploadFileLimit;                 break;             }         }     } } 这里只检测了有无文件和文件数限制,其他检测如文件大小等可以自己扩展,应该不难。 处理完数据之后就通知客户端: context.Response.Write("<script>window.parent.Finish('" + _msg + "');</script>"); 这个在上面iframe的内容中已经说明了。 使用说明 基本使用很简单,实例化一个file对象,其中参数分别是form对象,文件空间对象: new FileUpload("uploadForm", "idFile") 这样就实现了一个简单的无刷新上传文件表单。 还可以使用这几个属性: Form//表单 Folder//文件控件存放空间 Files//文件集合 更多的功能可以选择设置这些属性: 属性名:默认值//说明 FileName:"",//文件上传控件的name,配合后台使用 FrameName:"",//iframe的name,要自定义iframe的话这里设置name onIniFile:function(){},//整理文件时执行(其中参数是file对象) onEmpty:function(){},//文件空值时执行 Limit:0,//文件数限制,0为不限制 onLimite:function(){},//超过文件数限制时执行 Distinct:true,//是否不允许相同文件 onSame:function(){},//有相同文件时执行 ExtIn:[],//允许后缀名 onNotExtIn:function(){},//不是允许后缀名时执行 ExtOut:[],//禁止后缀名,当设置了ExtIn则ExtOut无效 onExtOut:function(){},//是禁止后缀名时执行 onFail:function(){},//文件不通过检测时执行(其中参数是file对象) onIni:function(){}//重置时执行 使用方法可以参考实例。 程序中提供了下面几个方法: Ini 整理空间 Check 检测file对象 Delete 删除指定file Clear 删除全部file 程序代码 var isIE = (document.all) ? true : false;var $ = function (id) {     return "string" == typeof id ? document.getElementById(id) : id; };var Class = {   create: function() {     return function() {       this.initialize.apply(this, arguments);     }   } }var Extend = function(destination, source) {     for (var property in source) {         destination[property] = source[property];     } }var Bind = function(object, fun) {     return function() {         return fun.apply(object, arguments);     } }var Each = function(list, fun){     for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } };//var FileUpload = Class.create(); FileUpload.prototype = {   //表单对象,文件控件存放空间  initialize: function(form, folder, options) {          this.Form = $(form);//表单    this.Folder = $(folder);//文件控件存放空间    this.Files = [];//文件集合         this.SetOptions(options);          this.FileName = this.options.FileName;     this._FrameName = this.options.FrameName;     this.Limit = this.options.Limit;     this.Distinct = !!this.options.Distinct;     this.ExtIn = this.options.ExtIn;     this.ExtOut = this.options.ExtOut;          this.onIniFile = this.options.onIniFile;     this.onEmpty = this.options.onEmpty;     this.onNotExtIn = this.options.onNotExtIn;     this.onExtOut = this.options.onExtOut;     this.onLimite = this.options.onLimite;     this.onSame = this.options.onSame;     this.onFail = this.options.onFail;     this.onIni = this.options.onIni;          if(!this._FrameName){         //为每个实例创建不同的iframe        this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000);         //ie不能修改iframe的name        var oFrame = isIE ? document.createElement("<iframe name=\"" + this._FrameName + "\">") : document.createElement("iframe");         //为ff设置name        oFrame.name = this._FrameName;         oFrame.style.display = "none";         //在ie文档未加载完用appendChild会报错        document.body.insertBefore(oFrame, document.body.childNodes[0]);     }          //设置form属性,关键是target要指向iframe    this.Form.target = this._FrameName;     this.Form.method = "post";     //注意ie的form没有enctype属性,要用encoding    this.Form.encoding = "multipart/form-data";     //整理一次    this.Ini();   },   //设置默认属性  SetOptions: function(options) {     this.options = {//默认值        FileName:    "",//文件上传控件的name,配合后台使用        FrameName:    "",//iframe的name,要自定义iframe的话这里设置name        onIniFile:    function(){},//整理文件时执行(其中参数是file对象)        onEmpty:    function(){},//文件空值时执行        Limit:        0,//文件数限制,0为不限制        onLimite:    function(){},//超过文件数限制时执行        Distinct:    true,//是否不允许相同文件        onSame:        function(){},//有相同文件时执行        ExtIn:        [],//允许后缀名        onNotExtIn:    function(){},//不是允许后缀名时执行        ExtOut:        [],//禁止后缀名,当设置了ExtIn则ExtOut无效        onExtOut:    function(){},//是禁止后缀名时执行        onFail:        function(){},//文件不通过检测时执行(其中参数是file对象)        onIni:        function(){}//重置时执行    };     Extend(this.options, options || {});   },   //整理空间  Ini: function() {     //整理文件集合    this.Files = [];     //整理文件空间,把有值的file放入文件集合    Each(this.Folder.getElementsByTagName("input"), Bind(this, function(o){         if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); }     }))     //插入一个新的file    var file = document.createElement("input");     file.name = this.FileName; file.type = "file"; file.onchange = Bind(this, function(){ this.Check(file); this.Ini(); });     this.Folder.appendChild(file);     //执行附加程序    this.onIni();   },   //检测file对象  Check: function(file) {     //检测变量    var bCheck = true;     //空值、文件数限制、后缀名、相同文件检测    if(!file.value){         bCheck = false; this.onEmpty();     } else if(this.Limit && this.Files.length >= this.Limit){         bCheck = false; this.onLimite();     } else if(!!this.ExtIn.length && !RegExp("\.(" + this.ExtIn.join("|") + ")$", "i").test(file.value)){         //检测是否允许后缀名        bCheck = false; this.onNotExtIn();     } else if(!!this.ExtOut.length && RegExp("\.(" + this.ExtOut.join("|") + ")$", "i").test(file.value)) {         //检测是否禁止后缀名        bCheck = false; this.onExtOut();     } else if(!!this.Distinct) {         Each(this.Files, function(o){ if(o.value == file.value){ bCheck = false; } })         if(!bCheck){ this.onSame(); }     }     //没有通过检测    !bCheck && this.onFail(file);   },   //删除指定file  Delete: function(file) {     //移除指定file    this.Folder.removeChild(file); this.Ini();   },   //删除全部file  Clear: function() {     //清空文件空间    Each(this.Files, Bind(this, function(o){ this.Folder.removeChild(o); })); this.Ini();   } } 【asp版本补充】 由于很多人问我asp版本的后台该如何写,所以决定写一个给大家。 这里我用了化境HTTP上传程序2.1版(应该是最新版了)的无组件上传类,但用的时候发现几个问题(不知是我不会用还是asp本身的问题): 1,当file控件的name是空时,后台会找不到文件; 2,文件名比较短时(例如我用"f"),后台也找不到文件; 3,当有多个file控件,如果使用相同的name,后台只会保存一个文件; 4,我在上传文件后输出的中文是乱码(有时又正常)。 针对前3条,我加了一个RanName属性,设为true的话会自动生成随机的file控件名,对于第4条,我发现如果字是直接写在文档上就不会乱码,所以我这里把输出的文字都直接写在文档上没有用变量。如果有兄弟知道怎么解决这些问题记得告诉我哦。下载完整测试代码(.net)下载完整测试代码(asp) 感谢由csdn网友mengshan1986提供的php和jsp版,klniuer的php修正版:下载完整测试代码(php)下载完整测试代码(jsp) ps:请注意程序中的文件保存路径,很多人的错误都是没有设置好文件保存路径。 其他上传系统: 简便无刷新文件上传系统 本文转自博客园cloudgamer的博客,原文链接:仿163网盘无刷新多文件上传系统,如需转载请自行联系原博主。
文章
前端开发  ·  JavaScript  ·  .NET  ·  PHP  ·  容器  ·  开发框架  ·  Java  ·  测试技术
2017-12-05
ASP.NET中的缩略图应用
在开发Web应用程序时,常常都会遇到图片上传和浏览的问题,有两种方案可以用来解决这个问题:     1. 将图片直接上传到服务器的硬盘上。优点是代码执行起来比较方便,给ASP.NET的执行进程赋予一定的权限,直接将操作的客户端文件保存到远程服务器上即可,并且在页面上读取图片非常方便,还可以直接设置图片的显示样式,如图片的大小、边框、链接地址等;缺点是安全性较差,从客户端访问服务器的目录存在一定的安全隐患,另外就是图片不便于管理,如用户删除图片、修改图片、图片上传后的文件名管理等,尤其是共享图片的管理。     2. 将图片转存到数据库中。优点是图片便于管理,DBA可以统一对图片进行操作,用户也可以非常方便地修改和删除已有的图片;缺点是代码执行起来稍微麻烦,而且针对不同的数据库还需要编写不同的执行代码,另外就是在处理页面中一组连续的图片时会有些麻烦,可能需要通过多次访问数据库来获取到页面上的所有图片,以及读取图片时同时设置图片的显示样式、对上传图片的文件大小限制等。     总之,两种解决方案各有利弊,但终究要选用哪种解决方案往往也是由项目需求所决定的,作为程序员本身,当然是希望越简单越好。其实个人觉得如果项目对图片的要求不是很高,而且数据量不太大,采用第一种方案比较合适,毕竟操作简单,实现起来比较容易,如果要对图片进行修改和删除的话,也可以增加一些补救措施。如用户上传图片的同时将图片的相关信息保存到数据库中,但图片文件本身保存到服务器的硬盘上,可以编写一个文件名生成程序用于在服务器上创建唯一的文件名,这样就可以避免当用户上传的图片与服务器上已有的图片文件名相同时文件被覆盖掉,数据库中保存文件的一个映射表用于进行图片的检索,当图片被修改或删除时根据映射表对磁盘上的文件进行相应的操作,操作成功后同时更新映射表。     第一种方案在上传和读取图片时都很容易,相关的代码我就不再具体给出来了,这里具体看一下第二种方案的实现。     首先是图片的上传。在ASP.NET中,我们在页面上可以直接使用Visual Studio提供的FileUpload控件,也可以使用input的file类型的标签,其中这两种控件在本质上并没有区别,只是微软提供的控件封装了一些属性和方法便于调用罢了(我个人推荐直接在页面上使用input type='file'的标签)。《由Stream.Position问题而引发的思考》一文中介绍了如何上传图片,在服务端得到要上传的图片后,可以通过调用SQL的存储过程将图片保存进数据库中。     读取图片时可以根据关键字调用数据库的存储过程得到图片实体,然后操作该实体将图片的二进制数据Write到页面上。一个图片的实体类可以仅有与图片相关的属性,类似于下面这样: public class ImageEntity {     public ImageEntity()     {     }     public ImageEntity(int id, string title, Byte[] imageBlob, string type)     {         ID = id;         Title = title;         ImageBlob = imageBlob;         Type = type;     }     public int ID { get; set; }     public string Title { get; set; }     public string Type { get; set; }     public Byte[] ImageBlob { get; set; } }     问题的关键是得到图片的实体后怎样将图片Write到页面上指定的地方,并设置图片的大小呢?     将图片Write到页面上可以通过MemoryStream的WriteTo方法,大致是这样的: Byte[] imageBlob = imageEntity.ImageBlob;if (imageBlob.Length > 0) {     using (MemoryStream stream = new MemoryStream(imageBlob))     {         Response.ContentType = imageEntity.Type;         stream.WriteTo(Response.OutputStream);         stream.Close();     } }      代码比较简单,没有什么很特别的地方,与在页面上输出其它内容的方式基本相同。不过这种方法只能将图片的内容输出到页面上,而不能在页面上指定的地方进行输出。要做到这一点,我们只能将输出图片的代码写在单独的一个页面中,然后在要显示图片的页面的指定位置写上<img>标签,并将它的src指向这个用来输出图片的页面的地址。这个方法很奏效!但仍然面临着一些问题,如设置图片显示时的大小。也许你会说直接设置<img>标签的Width和Height属性不就可以了吗?跟在第一种方案里面一样!事实上这种方法的效果并不是很好,第一种方案在实际应用中也会碰到类似的问题,如果我们仅仅只是设置了图片的高和宽,那么图片在显示时可能会变形甚至失真。解决这个问题的办法是采用.NET提供的图片缩略图功能,即采用Image对象的GetThumbnailImage方法。下面给出了一个完整的解决方案。 ThumbnailPage     其中缺省使用了BLL命名空间下的imageBll.GetImageById方法,这个方法需要自己编写,主要功能就是根据传入的图片ID从数据库中读取图片,并返回一个图片的实体对象。页面接收四个参数,包括图片压缩的高和宽、是否以缩略图方式显示图片(如果为否则不用指定高和宽),图片ID。代码的核心部分为GetThumbNail方法,读者可以参考msdn中给出的例子http://msdn.microsoft.com/zh-cn/library/bb882583.aspx 。EncoderParameter构造函数中的第二个参数(例子中的50L)为指定图片的压缩级别,最高为100,数值越高表示压缩得越少,越接近原图片质量。按照指定高和宽压缩后的图片会根据你所指定的压缩级别丢失一部分像素(图片原尺寸大于压缩后的尺寸),或者补充像素(图片原尺寸小于压缩后的尺寸)。     这里有一个小小的缺陷,因为图片是从数据库中读取的,如果页面上需要连续显示一组图片,并且要显示的图片数量比较多的话,采用此方法输出图片的时候就需要多次调用输出图片的页面,同时也就需要多次访问数据库,效率可能会有所降低,适当地采用数据库缓存可以来解决这个问题。还有就是当gif格式的图片存在多帧的动画时,被压缩后的图片只会显示第一帧。     另外,有一些问题需要引起注意,在使用MemoryStream.WriteTo方法往页面上输出图片时可能会有异常抛出,使用前必须确保MemoryStream的实例在使用完后被显示关闭并释放(如使用Using语句),并且保存图片原始数据的MemoryStream与压缩后保存图片数据的MemorySream对象不是同一个对象。通过GetImageType方法得到正确的ImageFormat,有的时候图片的ContentType会有一些细微的区别,各种不同的ContentType是否代表了同一种ImageFormat需要认真确认,这些因素都可能导致图片显示时导致异常。异常可能并不会直接在页面上反映出来,在调用的地方,要显示的图片在发生异常时会显示一个红色的小叉,表示图片显示失败。 本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/archive/2009/06/12/1502269.html,如需转载请自行联系原作者
文章
.NET  ·  数据库  ·  开发框架  ·  存储  ·  程序员  ·  数据库管理  ·  缓存  ·  SQL
2017-11-14
ASP.NET实现网页版小优盘
今天看到了一篇不错的文章,就拿来一起分享一下吧。 实现的是文件的上传与下载功能。 关于文件上传: 谈及文件上传到网站上,首先我们想到的就是通过什么上传呢?在ASP.NET中,只需要用FileUpload控件即可完成,但是默认上传4M大小的数据,当然了你可以在web.config文件中进行修改,方式如下: <system.web> <httpRuntime executionTimeout="240" maxRequestLength="20480"/> </system.web> //但是这种方式虽然可以自定义文件的大小,但并不是无极限的修改的 下一步,现在“工具”有了,要怎么上传呢?按照直觉是不是应该先选中我想要上传的文件呢?这就对了,因为从FileUpload控件返回后我们便已经得到了在客户端选中的文件的信息了,接下来就是将这个文件进行修改(具体的操作是:去掉所得路径下的盘符的信息,换成服务器上的相关路径下,不过这里并没有更改原本文件的名称)。然后调用相关的上传方法就好了。 先看一下界面文件吧 <form id="form1" runat="server"> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /> <br /> <br /> <br /> <br /> <br /> <asp:ImageButton ID="ImageButton_Up" runat="server" OnClick="ImageButton_Up_Click" style="text-decoration: underline" ToolTip="Up" Width="54px" />         <asp:ImageButton ID="ImageButton_Down" runat="server" OnClick="ImageButton_Down_Click" ToolTip="Download" Width="51px" /> <br /> <br />       <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>   </form> 然后是具体的逻辑 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } //a method for currying file updown private void UpFile() { String strFileName; //get the path of the file String FilePath = Server.MapPath("./") + "File"; //judge weather has file to upload if (FileUpload1.PostedFile.FileName != null) { strFileName = FileUpload1.PostedFile.FileName; //save all the message of the file strFileName = strFileName.Substring(strFileName.LastIndexOf("\\") + 1); try { FileUpload1.SaveAs(FilePath + "\\" + this.FileUpload1.FileName); //save the file and obey the rules Label1.Text = "Upload success!"; } catch (Exception e) { Label1.Text = "Upload Failed!"+e.Message.ToString(); } } } protected void ImageButton_Up_Click(object sender, ImageClickEventArgs e) { UpFile(); } protected void ImageButton_Down_Click(object sender, ImageClickEventArgs e) { Response.Redirect("DownFile.aspx"); } } 说完了上传,下面谈一谈文件的下载。这里主要是借助于Directory对象的GetFiles()方法,其可以获得指定路径下的所有的文件的名称。这样我们就可以用之来填充一个listBox,来供我们选择到底要下载那一个文件。 也许这时你会有一点疑惑了,我现在知道了有哪些文件可以下载,那下一步我要怎么来实现呢? 其实这里是利用了Session的存储机制,那就是将我们在listbox 中选择的item的内容记录到session的特定的key中,这样的话,我们就可以不用关心这些信息在页面间是怎么传输的了。只需要在想要进行下载的地方直接获取就可以了。 最为核心的是下载的过程: if (filepathinfo.Exists) { //save the file to local Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(filepathinfo.Name)); Response.AddHeader("Content-length", filepathinfo.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.Filter.Close(); Response.WriteFile(filepathinfo.FullName); Response.End(); } 下面看一下,下载界面的布局文件吧 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DownFile.aspx.cs" Inherits="DownFile" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <asp:ImageButton ID="ImageButton_Up" runat="server" Height="56px" OnClick="ImageButton_Up_Click" ToolTip="Upload" Width="90px" />             <asp:ImageButton ID="ImageButton_Down" runat="server" Height="52px" OnClick="ImageButton_Down_Click" style="margin-top: 0px" ToolTip="Download" Width="107px" />         <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> <asp:ListBox ID="ListBox1" runat="server" Height="169px" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" Width="371px"></asp:ListBox> </div> </form> </body> </html> 然后是具体的逻辑代码实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; public partial class DownFile : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack)//the first time to load { //get all the file in File folder String[] AllTxt = Directory.GetFiles(Server.MapPath("File")); foreach (String name in AllTxt) { ListBox1.Items.Add(Path.GetFileName(name)); } } } protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { //make use of sssion to save the selected file in the listbox with the key of "select" Session["select"] = ListBox1.SelectedValue.ToString(); } protected void ImageButton_Down_Click(object sender, ImageClickEventArgs e) { //judge weather user choose at least one file if (ListBox1.SelectedValue != "") { //get the path of the choosed file String FilePath = Server.MapPath("File/") + Session["select"].ToString(); //initial the object of Class FileInfo and make it as the package path FileInfo filepathinfo = new FileInfo(FilePath); //judge weather the file exists if (filepathinfo.Exists) { //save the file to local Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(filepathinfo.Name)); Response.AddHeader("Content-length", filepathinfo.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.Filter.Close(); Response.WriteFile(filepathinfo.FullName); Response.End(); } else { Page.RegisterStartupScript("sb", "<script>alert('Please choose one file,sir!')</script>"); } } } protected void ImageButton_Up_Click(object sender, ImageClickEventArgs e) { Response.Redirect("Default.aspx"); } } 注意: 最终的上传的文件将会在根目录下的File文件夹下看到,下载的时候也是从这个文件夹下进行下载的。 总结: 经过这个小项目的实践,我看到了session给编程带来的便利,也体会到了FileUpload控件的威力;然而这并不是全部,这里仅仅是冰山一角而已。希望能和广大博友一起进步一起提高!
文章
.NET  ·  开发框架  ·  C#  ·  存储
2015-12-20
SWFUpload 2.5.0版 官方说明文档 中文翻译版
SWFUpload v2.5.0 Documentation SWFUpload 2.5.0版 官方说明文档 中文翻译版 Table of Contents 内容列表 详情请点击翻译:yukon12345 2010.6.10   SWFUpload SWFUpload 版本 2 概览 (Overview) 入门( Getting Started) js对象 (SWFUpload JavaScript Object) 构造器(Constructor) 全局变量和常量 (Globals and Constants) 【新增内容】instances movieCount 【新增内容】QUEUE_ERROR 【新增内容】UPLOAD_ERROR 【新增内容】FILE_STATUS 【新增】UPLOAD_TYPE 【新增内容】BUTTON_ACTION 【新增内容】CURSOR 【新增内容】BUTTON_WINDOW_MODE 【新增】RESIZE_ENCODING 【新增】onload 属性 Properties 【新增内容】customSettings movieName 方法 Methods addSetting 不推荐 (deprecated) getSetting 不推荐 (deprecated) retrieveSetting 已移除 (removed in v2.1.0) destroy 添加自2.1.0 (added in v2.1.0) displayDebugInfo selectFile selectFiles startUpload 【新增】startResizedUpload (added in v2.5.0) cancelUpload stopUpload 【新增】requeueUpload getStats setStats getFile 【新增】getQueueFile (added in v2.5.0) addPostParam removePostParam addFileParam removeFileParam setUploadURL setPostParams setFileTypes setFileSizeLimit setFileUploadLimit setFileQueueLimit setFilePostName setUseQueryString setDebugEnabled setButtonImageURL (added in v2.2.0) setButtonDimensions (added in v2.2.0) setButtonText (added in v2.2.0) setButtonTextStyle (added in v2.2.0) setButtonTextPadding (added in v2.2.0) setButtonDisabled (added in v2.2.0) setButtonAction (added in v2.2.0) setButtonCursor (added in v2.2.0) 【新增内容】事件 Events flashReady 【新增】swfUploadPreload 【新增】swfUploadLoadFailed 【新增】swfUploadLoaded 【新增】buttonAction fileDialogStart fileQueued 【新增内容】fileQueueError fileDialogComplete 【新增】uploadResizeStart uploadStart uploadProgress uploadError 【新增】uploadSuccess uploadComplete debug 实用功能对象 SWFUpload Utility Objects Settings Object Settings Description 【新】Support Object File Object Stats Object 相关插件 SWFUpload Plug-ins 【新增内容】已知问题 Known Issues SWFUpload SWFUpload 最初是Vinterwebb.se 开发的客户端文件上传工具。它联合javascript和flash,在浏览器中提供一个优于传统上传标签 <input type="file" /> 的功能(和良好的用户体验)。 SWFUpload 的主要特性: 文件浏览对话框中可以选择多个文件 AJAX风格的上传,不用重刷新 上传过程中的各种事件. 可以在客户端调节图片大小 它使用的类命名空间兼容各种js库(i.e., jQuery, Prototype, 等.). 支持 Flash 9 and Flash 10 (2.2.0版本后取消对flash 8的支持) SWFUpload 的设计理念与其他基于flash的上传工具不同。SWFUpload 给开发者尽可能多的UI控制能力. 开发者可以使用 XHTML, CSS, JavaScript 来使它更符合自己网站的样式风格. 它提供一组简单的js事件更新上传状态,开发者可以根据这些事件来在网页中显示文件上传进度 不过不幸的是 Flash Player 10 迫使我们不得不用一个按钮(点击后)才能触发文件选择对话框,但SWFUpload允许开发者用js来修改这个按钮的文字等外观。 SWFUpload v2 SWFUpload v2 包含了许多新的特性,增强的稳定性,解决了Flash Player 中的一些bug,提供了一些有用的插件(Plug-ins). 新特性包括: 可利用Flash Player 10 安全特性. 可以随上传来POST额外的数据 针对每一个文件上传发送POST数据 完善的各种事件组. 所有设置,参数,都可以灵活配置. 可获取服务器回传的数据. 可暂停正在上传的文件,而不是取消. 任意修改上传的次序. 可提供单一或多文件的选择对话框. 可限制上传文件队列长度,文件大小,上传文件个数 可更好地处理0字节文件. 每个文件都有上传确认事件. Overview HTML Upload 标准的HTML上传框只提供一个按钮和一个文本框让用户选择单个文件。然后通过表单提交。整个文件必须等到它上传完毕后才能确认并检查文件大小,文件扩展名,而且上传的过程中,回传反馈很少。这就造成了一些使用上的不便利。 但传统的HTML上传十分简单,单一步骤,所有浏览器都支持它。 SWFUpload SWFUpload 使用Flash 影片(flash movie) 来选择和上传文件。影片里有一个可定制的按钮来激活文件选择对话框。文件选择对话框允许用户选择单一的文件或者多个文件。 选择的的文件类型也是可以被限制的,开发人员可以限定用户只能选择指定的适当的文件,例如*.jgp;*.gif。 一旦选择并点击确定,每个文件都会被验证,并放入队列。当Flash上传文件的时候,由开发人员预定义的Javascript事件会被触发以便来更新页面中的UI显示,并且还能实时提供上传状态和错误信息。 文件的上传是独立于页面和表单的。每个文件单独的上传到处理页面,这就使服务器可以简单轻松地处理文件。flash提供的上传服务使得整个页面不必提交或者刷新。这有点像AJAX程序。页面中的Form表单数据会和FLASH控制的文件上传单独处理。 入门 Getting Started SWFUpload 不是拖放式的上传控件。因此需要一些dom和js的知识。几个demo将会展示swfUpload的能力以及如何使用它们完成任务。 SWFUpload 包含4部分: 初始化和设置 (JavaScript) JavaScript 库: SWFUpload.js Flash控件: swfupload.swf 和 swfupload_fp9.swf 事件处理机制 (JavaScript) 许多使用 SWFUpload 的问题都出在设置上。错误的事件处理, Flash/浏览器的Bug,或者服务器配置。 初始化和设置 Initialization and Settings SWFUpload 必须在页面上初始化.它通常在js的window.onload事件里完成. SWFUpload 的构造函数需要获取一个Object类型的对象(js). 这个对象的数据直接的传递给构造函数. 初始化的SWFUpload对象的引用(reference)应该保存好,(yukon:即用变量存储起来.如例子中的swfu)因为在启动文件上传以及控制其他特性的时候也需要这个引用。 例子:初始化SWFUpload时直接传入一个匿名对象来配置参数 var swfu; window.onload = function () { swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", //处理上传文件的地址 flash_url : "http://www.swfupload.org/swfupload.swf", //核心功能swf的地址 flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" //文件大小限制 }); }; 例子: 也可以在初始化SWFUpload时使用一个对象变量(settings_object)传入配置参数 var swfu; window.onload = function () { var settings_object = { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" }; swfu = new SWFUpload(settings_object); }; js库 JavaScript library 如果想使用swfupload, js库文件(swfupload.js) 必须被引入到使用的页面中. 一旦 SWFUpload 对象被创建,就可以访问许多功能函数。开发者可以以此来控制SWFUpload。 例: 如何引入swfupload.js库 <script type="text/javascript" src="http://www.swfupload.org/swfupload.js"></script> 例: 按需初始化 SWFUpload. var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", button_placeholder_id : "spanSWFUploadButton" //yukon:这里有个新参数,将会使用js在id为“spanSWFUploadButton”的标签容器如span,div中创建一个“选择”按钮 }); 【新增内容】flash控件 Flash Control SWFUpload js库能动态的加载 Flash 控件 (swfupload.swf 或 swfupload_fp9.swf). Flash控件的文件地址在初始化的时候就必须在SWFUpload设置对象中定义。 Flash控件实际上是个Flash小影片,它可以控制文件的选择,验证和上传。 它在页面中展现给用户的是一个UI可自定制的按钮,并且能检测Flash Player的版本(9,10)自动加载适合用户播放器版本的flash控件 使用 flash_url 和 flash9_url 可以设置swfupload.swf 或者 swfupload_fp9.swf 的路径。(yukon:前面几个例子已经有写了) 事件处理 The Event Handlers 开发者必须创建一组js函数来处理SWFUpload的事件. 当各种重要的事件发生的时候,这些函数会被触发执行。 通过处理SWFUpload的事件,开发人员能够提供关于上传进度、出错信息以及上传完成等的信息反馈。注意:开发人员不要重写了存储在SWFUpload.prototype的函数。 例: SWFUpload事件处理和初始化. // 上传开始(uploadStart)事件处理函数. 设置对象的“upload_start_handler”属性的值应是此函数的名字 var myCustomUploadStartEventHandler = function (file) { var continue_with_upload; if (file.name === "the sky is blue") { continue_with_upload = true; } else { continue_with_upload = false; } return continue_with_upload; }; // 上传成功( uploadSuccess )事件处理函数. 设置对象的“upload_success_handler”属性的值应是此函数的名字 var myCustomUploadSuccessEventHandler = function (file, server_data, receivedResponse) { alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data); }; // Create the SWFUpload Object var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "200 MB", upload_start_handler : myCustomUploadStartEventHandler, upload_success_handler : myCustomUploadSuccessEventHandler swfupload js 对象 SWFUpload JavaScript Object 构造函数 Constructor SWFUpload(settings object) //SWFUpload(设置对象) 返回: 一个SWFUpload 实例 var swfupload_instance = new SWFUpload(settings_object); 全局变量和常量 Globals and Constants SWFUpload定义了一些全局变量和常量,这对SWFUpload的高级应用和处理错误都是很有用的,它们都是只读的。 【新增内容】SWFUpload.instances SWFUpload.instances 是存贮着一个页面中所有SWFUpload实例引用的数组对象。Flash Player依靠这个对象数组来调用正确的事件处理函数。SWFUpload.instances对象数组的索引(SWFUpload.instances[index])是属性movieName。 SWFUpload.movieCount SWFUpload.movieCount 是一个全局变量,记录页面中已创建了多少个SWFUpload对象实例,并用来确保每个flash影片均被赋予一个唯一的movieName. 【新增内容】SWFUpload.QUEUE_ERROR SWFUpload.QUEUE_ERROR 是一个简单的js对象,包含了队列错误码(Queue Error code)的常量。用来决定当文件队列错误(fileQueueError)发生时,将发送什么错误码。 SWFUpload.QUEUE_ERROR = { QUEUE_LIMIT_EXCEEDED : -100, FILE_EXCEEDS_SIZE_LIMIT : -110, ZERO_BYTE_FILE : -120, INVALID_FILETYPE : -130 }; QUEUE_LIMIT_EXCEEDED - 指出用户入队过多,超过队列最大长度。不过一旦在队列中的文件被上传或者删除,用户仍然可以添加文件到文件上传等待队列中。 FILE_EXCEEDS_SIZE_LIMIT -指出超过了所限制的文件大小(file_size_limit). ZERO_BYTE_FILE - 指出选择的文件时0字节的。Flash Player不能处理空文件。上传Windows快捷方式图标也会触发这个错误。 INVALID_FILETYPE - 指出选择的文件扩展名与允许不符。用户手工输入扩展名不符的文件名,而不是用鼠标点击选择文件的时候就有可能触发这个错误。 【新增内容】SWFUpload.UPLOAD_ERROR SWFUpload.UPLOAD_ERROR 也是一个简单的js数组对象,它包含了上传错误码常量(Upload Error code constants).用来决定当上传错误(uploadError)事件发生时发送什么错误码. SWFUpload.UPLOAD_ERROR = { HTTP_ERROR : -200, MISSING_UPLOAD_URL : -210, IO_ERROR : -220, SECURITY_ERROR : -230, UPLOAD_LIMIT_EXCEEDED : -240, UPLOAD_FAILED : -250, SPECIFIED_FILE_ID_NOT_FOUND : -260, FILE_VALIDATION_FAILED : -270, FILE_CANCELLED : -280, UPLOAD_STOPPED : -290 }; HTTP_ERROR - 尝试上传给服务器,但服务器没有返回200状态码(200表示无异常) MISSING_UPLOAD_URL - 没有设置上传地址(upload_url). IO_ERROR - 当读取和发送文件时出现了一些错误。通常发生在服务器非预期地关闭了终端连接的时候。 SECURITY_ERROR - 安全错误,上传违反了安全约束。比较少见。 UPLOAD_LIMIT_EXCEEDED - 用户尝试上传比预设数多的文件 UPLOAD_FAILED - 尝试初始化上传时出现了错误。比较少见。 SPECIFIED_FILE_ID_NOT_FOUND - 一个文件开始上传,但没有找到这个文件。(yukon:文件选择完并添加到队列后,用户又在磁盘上改了文件名或者删除了文件等) FILE_VALIDATION_FAILED - 当上传开始时传回了某错误 FILE_CANCELLED - 取消了上传(调用了cancelUpload函数) UPLOAD_STOPPED - 暂停了上传(调用了stopUpload函数) RESIZE_ERROR - 当调整图像大小时出现了某错误 【新增内容】SWFUpload.FILE_STATUS SWFUpload.FILE_STATUS 是一个js数组对象,包含了文件状态码常量( File Status code constants). 用来检测File对象的属性file status SWFUpload.FILE_STATUS = { QUEUED : -1, IN_PROGRESS : -2, ERROR : -3, SUCCESS : -4, CANCELLED : -5 }; QUEUED - 指示此文件正在等待上传队列中 IN_PROGRESS - 指示此文件现在正在上传中 ERROR - 指示此文件引发了一个队列或上传错误 COMPLETE - 指示此文件已成功传输给服务器 CANCELLED - 指示此文件被取消上传(调用了cancelUpload函数). 【新增】SWFUpload.UPLOAD_TYPE[作用:确定上传类型] SWFUpload.UPLOAD_TYPE 是一个js数组对象,包含了上传类型常量(Upload Type constants). 用于检测File对象的上传类型属性( upload type property) NORMAL - 普通的SWFUpload 上传 RESIZED - 被调整大小的图片上传,数据以HTTP的post方式发送。 【新增内容】SWFUpload.BUTTON_ACTION[作用:决定点击按钮后执行的动作] SWFUpload.BUTTON_ACTION 是一个js数组对象,包含了按钮动作码常量(button action code constants). 用于按钮动作(button_action)的值设置,从而可设置flash影片中的那个交互式按钮对各种鼠标动作的的相关响应. SWFUpload.BUTTON_ACTION = { SELECT_FILE : -100, SELECT_FILES : -110, START_UPLOAD : -120 } SELECT_FILE - 点击按钮时,打开单一文件选择对话框。(js设定的)鼠标点击事件不会被触发 SELECT_FILES - 点击按钮时,打开多文件选择对话框。(js设定的)鼠标点击事件不会被触发 START_UPLOAD - 点击按钮时,在上传队列的第一个文件将被上传。(js设定的)鼠标点击事件不会被触发 NONE - 这种情况下,(js设定的)鼠标点击事件会被触发 JAVASCRIPT - 和NONE相同。这个值已被弃用 【新增内容】SWFUpload.CURSOR[作用:改变鼠标样式] SWFUpload.CURSOR 是一个js数组对象,包含了按钮光标常量。用于按钮光标 (button_cursor)的值的设置,从而改变鼠标指向按钮时,鼠标的样式。 SWFUpload.CURSOR = { ARROW : -1, HAND : -2 } ARROW - 光标呈现成箭头指针 HAND - 光标呈现成手型 【新增内容】SWFUpload.WINDOW_MODE[作用:影片的显示模式] SWFUpload.WINDOW_MODE 是一个js数组对象,包含了按钮影片窗口模式参数常量(button movie wmode parameter constants). 用于告诉浏览器如何呈现flash影片。 有些 WINDOW_MODE/WMODE 设置会导致一些浏览器问题 具体请看 Known Issues. SWFUpload.WINDOW_MODE = { WINDOW : "window", TRANSPARENT : "transparent", OPAQUE : "opaque" }; WINDOW 是默认模式. flash影片绘制在页面的最上层. OPAQUE 允许页面其他元素遮盖这个按钮影片。 TRANSPARENT 透明。按钮的背景呈透明状,允许html元素在它下面显示 【新增】SWFUpload.RESIZE_ENCODING[作用:指出图片编码格式] SWFUpload.RESIZE_ENCODING 是一个js数组对象,包含了大小调整类型常量( resize encoding type constants).用以指出被大小调整的图片的编码格式 JPEG - JPEG编码格式 PNG - PNG 编码格式 【新增】SWFUpload.onload [作用:定义页面加载完毕后的操作函数] onload 是一个可以通过swfobject的addDOMLoadEvent方法执行的函数. 你通过这个方法,在页面加载完毕之后可以执行你的脚本程序。不过你应该确定你没有使用其他类似的方法 (比如 jQuery框架的 “Ready” 或者 Prototype库中的 dom:loaded). SWFUpload.onload = function () { new SWFUpload(settingsObject); } 上面一个例子将在最早的浏览器加载事件中初始化SWFUpload。大多DOM准备完毕事件(DOMReady event)的执行时紧随window.onload事件之后。 属性 Properties 请遵循下面的属性列表描述来使用这些属性。如果把错误的使用一个只读或只写属性属性,将会导致SWFUpload错误. 【新增内容】customSettings (可读写)[作用:开发人员自定义设置] “自定义设置”属性( customSettings)是一个js空对象。用以存储与一个SWFUpload实例有关的数据。 它的内容可以使用设置对象中的custom_settings属性来初始化。 Example: // 初始化 SWFUpload 对象时使用一些自定义设置 var swfu = new SWFUpload({ custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } }); swfu.customSettings.custom_setting_1 = "custom_setting_value_1"; // 改变一个已有的自定义设置 swfu.customSettings.myNewCustomSetting = "new custom setting value"; // 添加一个新的自定义设置 // 用一个全新的对象来重写自定义设置 swfu.customSettings = { custom_setting_A : "custom_setting_value_A", custom_setting_B : "custom_setting_value_B" }; 存储在自定义设置对象(customSettings object)的值可以轻松地被事件处理函数访问:(yukon:这个属性是利用js的动态特性,给开发者高度的开发自由) function uploadSuccess(file, serverData, receivedResponse) { if (this.customSettings.custom_setting_A === true) { alert("Checked the custom setting!"); } } movieName (只读)[作用:存储一个swfload实例的唯一标示] 包含了某SWFUpload实例的唯一标示名. 这个值可传递给Flash,以帮助as-js之间的交互。用于索引存储在SWFUpload.instances数组的实例. 你不应该也不能改变它。 方法 Methods 下面的方法用于操作SWFUpload. 有些方法可以与DOM元素的单击事件绑定,其它的方法供SWFUpload内部处理事件中调用。 object addSetting(setting_name, value, default_value) 不赞成使用 The addSetting function sets a setting value. If the value is undefined then the default_value is used. The function is used by SWFUpload addSetting returns the value that was stored in the setting. object getSetting(setting_name) 不赞成使用 The getSetting function retrieves the value of a setting. If the setting is not found an empty string is returned. object retrieveSetting(setting_value, default_value) 在 v2.1.0 中移除 The retrieveSetting function is similar to the addSetting function except it does not modify the internal settings object. retrieveSetting returns the setting_value unless it is undefined in which case it returns the default_value This is a utility function. bool destroy() [作用:销毁一个SWFUpload实例] 自 v2.1.0 添加 移除一个SWF的DOM元素,并且销毁SWFUpload的内部引用. 用以彻底删除页面中的一个SWFUpload实例. 防止在ie中的内存泄露问题 如果成功移除,返回true,如果出现任何导致SWFUpload实例的状态出现错误的问题,将返回false(Returns false if any error occurs leaving the SWFUpload instance in an inconsistent state). void displayDebugInfo()[作用:输出调试信息] 在debug事件中displayDebugInfo()输出SWFUpload 设置. 如果在初始化时候debug setting被设置为true,这个函数会被自动的调用。 void selectFile() 不推荐. 不兼容 Flash Player 10. selectFile causes the Flash Control to display a File Selection Dialog window. A single file may be selected from the Dialog window. Calling selectFile begins the File Event Chain. void selectFiles() 不推荐. 不兼容Flash Player 10. selectFiles causes the Flash Control to display a File Selection Dialog window. A multiple files may be selected from the Dialog window. Calling selectFiles begins the File Event Chain. void startUpload(file_id)【作用:开始上传文件】 startUpload接收file_id来上传文件。如果不传给它file_id值,那么将默认上传待上传队列的第一个文件 调用startUpload会触发上传事件链 (the Upload Event Chain). 【新增】void startResizedUpload(file_id, width, height, encoding, quality, allowEnlarging)【作用:附带调整图片大小功能的上传】 startResizedUpload 接收file_id参数来上传文件. SWFUpload尝试调整文件长宽等设置(如果是flash支持的图片格式) .如果图片格式不被支持,会引发一个上传错误(uploadError). width和height参数用来设定图片最大宽和高。但调整过程中会保持图片宽高比。 encoding的值必须是是存在SWFUpload.RESIZE_ENCODING中的常量. quality 只能用于调节JPEG格式图像的品质。接收范围是0-100。如果在这个范围外,会强制成0或100. allowEnlarging参数定义了SWFUpload是否允许将原图像扩大。(默认为true)如果原图像的长宽小于前面所说的width和height。如果设置其值为false的话,图像仍然会被编码,但不会将它扩大。 调用startResizedUpload方法会引发一个普通的上传事件链锁 . 但是Flash Player不会定时地提供 uploadProgress 事件. SWFUpload只会发送 模拟 0% 和 100% 的上传过程事件(uploadProgress events). 被调节大小的图片以POST方式传递数据,(而不是像FILE那样) 因为Flash Player 10引入了安全特性 .附带调整图片大小功能的上传的php处理页面和普通的上传php处理页面有所不同: $resizedImageData = $_POST["Filedata"]; // 服务器端以$_POST方式接收数据而不是 $_FILE $fileHandle = fopen("image.jpg", "w"); //以file系列操作函数来存储图片 fwrite($fileHandle, $resizedImageData); fclose($fileHandle); void cancelUpload(file_id, trigger_error_event)【作用:移除一个上传】 cancelUpload接收file_id 参数来移除一个文件的上传.这个文件会被移除出待上传队列 . 如果不给它file_id,默认上传队列中的第一个文件将会被取消. 可选参数trigger_error_event如果被设置为false,uploadError事件将不会被触发. void stopUpload()【作用:停止上传文件】 stopUpload停止当前正在上传的文件,并且把它还原到待上传队列中。(yukon:和移除不同,就是取消这个文件的上传,但不会移除出上传队列) 调用stopUpload时,如果有正在上传的文件,uploadError事件会被触发;如果此时没有正在上传文件,那么不会发生任何操作,也不会触发任何事件。 【新增】bool requeueUpload(file_id or index)【作用:重新入队】 requeueUpload将之前曾经入队的文件重新加入等待上传队列 如果文件没有找到,或者正在被上传,会返回false 注意:被重新入队的文件不会被再一次检查文件大小,队列大小,总上传个数或其他限制,只会把文件添加到队列中,如果这个文件引用仍然存在 object getStats()【作用:返回当前状态对象】 返回状态对象(stats object). void setStats(stats_object)【作用:设置或修改状态对象】 设置或修改状态对象( Stats Object) . 如果你在上传完毕后改变上传成功数,上传失败数,你可以使用此方法 object getFile(file_id|index)【作用:在队列中获取特定文件对象】 getFile通过接收file id (某个文件对象的id) 或者 file index (某个文件对象的index属性),返回在队列中的文件对象. 当给getFile传递一个file_id,只有在队列中的文件才可能被获取,如果找不到文件,将返回null 当给getFile传递一个index,所有尝试入队的(包括哪些入队时产生了错误的文件)将可能被获取。如果index索引超出范围,会返回null 【新增】object getQueueFile(file_id|index)【作用:返回等待上传队列中特定的文件对象】 getQueueFile 用来从等待上传队列中返回单个文件对象。 具体是通过接收file id (某个文件对象的id) 或者 file index (某个文件对象的index属性),返回在队列中的文件对象.index 索引从0开始计算. 当给 getQueueFile传递一个file_id,只有在等待上传队列中的文件才可能被获取,如果找不到文件,将返回null 当给 getQueueFile传递一个index,只有在等待上传队列中的文件才可以被获取 例如: getQueueFile(0) 返回一个在等待上传队列首部的文件对象. 如果调用了startUpload函数,它将在当前上传文件上传完毕后被上传。 (yukon:上面2个方法的区别可能是:getFile是获取文件队列中的文件。包括已上传的,错误的,等待上传的队列。而getQueueFile只获取等待上传队列中的文件) void addPostParam(name, value)【作用:添加一个键/值对】 addPostParam 添加一个键/值对,在每个的文件被上传时以POST方式捎带发送 它对应着post_params设置中的相同键值对。如果post_params中已经存在该值,那么实际上会被覆盖。 void removePostParam(name)【作用:移除一个键/值对】 removePostParam 移除一个键/值对,这个键值对之前将在每个的文件被上传时以POST方式捎带发送 它对应着post_params设置中的相同键值对。如果post_params中已经存在该值,那么实际上会被移除。 bool addFileParam(file_id, name, value) 为指定file_id的某一文件对象添加一个POST键/值对,如果添加的name属性已经存在,那么原值会被覆盖。 如果需要给所有文件对象添加POST值,那么可以使用设置中的post_params属性。 bool removeFileParam(file_id, name) 删除由addFileParam添加的POST值对. 如果POST设置中没有此属性,那么返回false void setUploadURL(url) 动态修改设置中的upload_url属性。 void setPostParams(param_object) 动态修改post_params,以前的属性全部被覆盖。param_object必须是一个JavaScript的基本对象,所有属性和值都必须是字符串类型。 void setFileTypes(types, description) 动态修改设置中的file_types 和 file_types_description,两个参数都是必须的 void setFileSizeLimit(file_size_limit) 动态修改设置中的file_size_limit,此修改针对之后的文件大小过滤有效。file_size_limit参数接收一个单位,有效的单位有B、KB、MB、GB,默认单位是KB。 例如: 2147483648 B, 2097152, 2097152KB, 2048 MB, 2 GB void setFileUploadLimit(file_upload_limit) 动态修改设置中的file_upload_limit,特殊值0表示无限制。 提醒:这里限制的是一个SWFUpload实例控制上传成功的文件总数。 void setFileQueueLimit(file_queue_limit) 动态修改设置中的file_queue_limit,特殊值0表示无限制。 提醒:这里限制的是文件上传队列中(入队检测通过的文件会添加到上传队列等待上传)允许排队的文件总数。. void setFilePostName(file_post_name) 动态修改设置中的file_post_name,注意在Linux环境下,FlashPlayer是忽略此设置的。 void setUseQueryString(use_query_string) 动态修改设置中的use_query_string,设置为true的时候,SWFUpload以GET形式发送数据,如果为false,那么就以POST发送数据。 void setDebugEnabled(debug_enabled) 动态启动/禁止 debug输出,debug_enabled参数是一个布尔值。 void setButtonImageURL(url) 动态修改按钮的图片。url参数是相对于该swf文件或者是绝对地址的图片(例如:以 /开始的相对路径或者是绝对路径:http://www.swfupload.org/buttonImage.png)。所有FLASH支持的图片类型都可以使用(gif,jpg,png)。 该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片) void setButtonDimensions(width, height) 动态修改SWF影片的尺寸以适应Button的图片大小。值必须是纯数值不能包括长度单位.高必须是整个图片按钮高的1/4,以此来保证显示的正确 void setButtonText(text) 动态设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合setButtonTextStyle方法来设置。如果文字过大,将会被隐藏超过的部分关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation。 void setButtonTextStyle(css_style_text) 配合setButtonText方法,可以通过CSS样式来动态设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation void setButtonTextPadding(left, top) 设置flash按钮文本的左边和右边的padding。值可以为负数 void setButtonDisabled(isDisabled) 当设置为 'true'是会禁用flash按钮,任何关于按钮的动作与操作都会被忽略。 void setButtonAction(buttonAction) 定义鼠标被点击后执行的动作。BUTTON_ACTION常量枚举中存储着这个方法可用的值 void setButtonCursor(buttonCursor) 设置鼠标指针指向按钮时的样式。CURSOR常量枚举中存储着这个方法可用的值 【新增内容】事件 Events SWFUpload在操作过程中会触发一系列事件,开发者可以利用这些回调的处理事件来控制UI,控制操作或者报告错误。 所有的事件都是在SWFUpload实例的上下文中调用的,因此在这些回调的事件中使用this能够直接访问到该触发该事件的实例对象。 所有事件应该在实例初始化时setting参数中预设完成。 【新:】 上传一个文件时,事件按照下面的顺序被调用(上传事件链): 附加调整图片大小功能的上传开始 uploadResizeStart 普通上传开始 uploadStart 正在上传中 uploadProgress (在上传文件的过程中重复的被调用着) 上传错误 uploadError (当出现某些错误时被调用, 上传文件将被取消或停止) 上传成功 uploadSuccess (成功的上传了文件,服务器接受到了可用数据) 完成了上传 uploadComplete (上传完成,SWFUpload 准备开始上传下一个) flashReady() 该事件函数是内部事件,因此不能被重写。加载的FLASH控件完成所有初始化操作时,将触发此事件来通知SWFUpload它可以接受各种命令了。 提醒:对应设置中的自定义事件swfupload_loaded_handler 【新增】 swfUploadPreload() swfUploadPreload 事件是 SWFUpload 已确认各项可用特性之后,Flash Movie加载完毕之前的这段时间内触发的事件.此事件的处理函数如果返回false,将停止加载swfupload。通常用在处理浏览器不支持某重要特性参数的情况 。 在设置对象的 swfupload_preload_handler 属性中可设置此事件处理函数 【新】swfUploadLoadFailed() 当页面不能正常加载flash影片的时候。通常是因为没有安装Flash Player或者它的版本低于 9.0.28 在设置对象的 swfupload_load_failed_handler 属性中可设置此事件处理函数 【新】swfUploadLoaded() swfUploadLoaded 事件在flash加载并准备完毕后被触发. 它是可设定的。 swfUploadLoaded 事件将会通知你flash加载完毕,能安全的执行各项方法了。 在设置对象的 swfupload_loaded_handler 属性中可设置此事件处理函数 【新】mouseClick() mouseClick事件在按钮被单击,(同时button_action setting的值为SWFUpload.BUTTON_ACTION.NONE,或者是flash按钮被设置为disable时)才被触发。 如果button_action settings的值为其他,或者flash按钮可用,这个事件都不被触发 在设置对象的 mouse_click_handler 属性中可设置此事件处理函数 【新】mouseOver() mouseOver事件将在鼠标在flash影片的任何部分移动时被触发 在设置对象的 mouse_over_handler 属性中可设置此事件处理函数 【新】mouseOut() mouseOut 事件再鼠标离开flash影片时被触发 在设置对象的 mouse_out_handler 属性中可设置此事件处理函数 fileDialogStart() 此事件在selectFile或者selectFiles调用后,文件选择对话框显示之前触发。只能同时存在一个文件对话框。但是,这个事件处理函数将不被执行,直到文件选择对话框被关闭 在设置对象的 file_dialog_start_handler 属性中可设置此事件处理函数 fileQueued(file object) 当选择好文件,文件选择对话框关闭消失时,如果选择的文件成功加入待上传队列,那么针对每个成功加入的文件都会触发一次该事件(N个文件成功加入队列,就触发N次此事件)。 对应设置中的自定义事件file_queued_handler 【新增内容】fileQueueError(file object, error code, message)   当选择文件对话框关闭时,如果选择的文件加入到上传队列中失败,那么针对每个出错的文件都会触发一次该事件(此事件和fileQueued事件是二选一触发,文件添加到队列只有两种可能,成功和失败)。 文件入队出错的原因可能有:1.超过了上传大小限制,2.文件为零字节,3.超过文件队列数量限制,4.允许外的无效文件类型。 (yukon:经测试,message所含的内容如下: 1.超过了上传大小限制:message=File size exceeds allowed limit. 2.文件为零字节:message=File is zero bytes and cannot be uploaded. 3.超过文件队列数量限制:message=int(指你设定的队列大小限制数) 4.允许外的无效文件类型:message=File is not an allowed file type. 如果你要改这些消息,请在开源包里的swfupload.as里改,然后重新编译成swfupload.swf。 ) 具体的出错原因可由error code参数来获取,error code的类型可以查看SWFUpload.QUEUE_ERROR中的定义。 提醒:对应设置中的自定义事件file_queue_error_handler 注意:如果选择入队的文件数量超出了设置中的数量限制,那么所有文件都不入队,此事件只触发一次。如果没有超出数目限制,那么会对每个文件进行文件类型和大小的检测,对于不通过的文件触发此事件,通过的文件成功入队。 fileDialogComplete(number of files selected, number of files queued, total number of files in the queued) 当选择文件对话框关闭,并且所有选择文件已经处理完成(加入上传队列成功或者失败)时,此事件被触发,number of files selected是选择的文件数目,number of files queued是此次选择的文件中成功加入队列的文件数目。 提醒:对应设置中的自定义事件file_dialog_complete_handler 注意:如果你希望文件在选择以后自动上传,那么在这个事件中调用this.startUpload() 是一个不错的选择。 如果需要更严格的判断,在调用上传之前,可以对入队文件的个数做一个判断,如果大于0,那么可以开始上传。 【新】uploadResizeStart(file object, width, height, encoding, quality) uploadResizeStart事件处理函数在一个图片开始调整大小时被调用。调整期间不提供progress事件和处理方法。 但是重新编码图片会花费一些时间 。如果这期间出现错误的话 uploadError事件将会被触发 当调整完成SWFUpload 继续触发 uploadStart事件,并且开始和普通上传一样的事件链. uploadStart(file object) 在文件开始向服务端上传之前触发uploadStart事件,这个事件处理函数可以完成上传前的最后验证以及其他你需要的操作,例如添加、修改、删除post数据等。 在完成最后的操作以后,如果函数返回false,那么这个上传不会被启动,如果返回true或者无返回,那么将正式启动上传。 提醒:对应设置中的自定义事件upload_start_handler uploadProgress(file object, bytes complete, total bytes) uploadProgress事件由flash控件定时触发,提供三个参数分别访问上传文件对象、已上传的字节数,总共的字节数。因此可以在这个事件中来定时更新页面中的UI元素,以达到及时显示上传进度的效果。 注意: 在Linux下,Flash Player只在整个文件上传完毕以后才触发一次该事件,官方指出这是Linux Flash Player的一个bug,目前SWFpload库无法解决。 提醒:对应设置中的自定义事件upload_progress_handler uploadError(file object, error code, message) 无论什么时候,只要上传被终止或者没有成功完成,那么uploadError事件都将被触发。error code参数表示了当前错误的类型,更具体的错误类型可以参见SWFUpload.UPLOAD_ERROR中的定义。Message参数表示的是错误的描述。File参数表示的是上传失败的文件对象。 例如,我们请求一个服务端的一个不存在的文件处理页面,那么error code会是-200,message会是404。 停止、退出、uploadStart返回false、HTTP错误、IO错误、文件上传数目超过限制等,都将触发该事件,Upload error will not fire for files that are cancelled but still waiting in the queue。(对于官方的这句话我还存在疑问,文件退出以后怎么还会保留在文件上传队列中保留呢?) 提醒:对应设置中的自定义事件upload_error_handler 注意:此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。 【新增内容】uploadSuccess(file object, server data, received response) 当文件上传的处理已经完成(这里的完成只是指向目标处理程序发送完了Files信息,只管发,不管是否成功接收),并且服务端返回了200的HTTP状态时,触发uploadSuccess事件。server data指的是服务器发出的一些数据(比如你自己echo出的)而received response是服务器自己发出的HTTP状态码 由于一些Flash Player的bug,HTTP状态码可能不会被获取到,从而导致uploadSuccess事件不能被触发。由于这个原因,2.50版在设置对象中增加了一个新属性assume_success_timeout 用来设置是否超过了等待接收HTTP状态码的最长时间,超过即触发 uploadSuccess。在这种情况下,(received response)参数会无效。 设置对象中的 http_success 允许设置在HTTP状态码为非200的其他值时也触发uploadSuccess事件。In this case no server data is available from the Flash Player. 在 提醒:对应设置中的自定义事件upload_success_handler 注意: server data是服务端处理程序返回的数据。 此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。 在window平台下,那么服务端的处理程序在处理完文件存储以后,必须返回一个非空值,否则此事件不会被触发,随后的uploadComplete事件也无法执行。 uploadComplete(file object) 当上传队列中的一个文件完成了一个上传周期,无论是成功(uoloadSuccess触发)还是失败(uploadError触发),uploadComplete事件都会被触发,这也标志着一个文件的上传完成,可以进行下一个文件的上传了。 如果要下个文件自动上传,那么在这个时候调用this.startUpload()来启动下一个文件的上传是不错的选择。不过要小心使用。参见注意 提醒:对应设置中的自定义事件upload_complete_handler 注意:当在进行多文件上传的时候,中途用cancelUpload取消了正在上传的文件,或者用stopUpload停止了正在上传的文件,那么在uploadComplete中就要很小心的使用this. startUpload(),因为在上述情况下,uploadError和uploadComplete会顺序执行,因此虽然停止了当前文件的上传,但会立即进行下一个文件的上传,你可能会觉得这很奇怪,但事实上程序并没有错。如果你希望终止整个队列的自动上传,那么你需要做额外的程序处理了。 debug(message) 如果debug setting设置为true,那么页面底部会自动添加一个textArea, 如果此debug事件没有被重写,那么SWFUpload库和Flash都会调用此事件来在页面底部的输出框中添加debug信息供调试使用。 提醒:对应设置中的自定义事件debug_handler 功能对象 SWFUpload Utility Objects 设置对象 Settings object 它是一个js的Object类型的变量,为SWFUpload的实例初始化提供配置。 其中的每一个配置属性都只能出现一次。 很多属性都是可选的,如果可选属性没有被配置,那么会使用SWFUpload库中默认指定的合适的值,具体可查看setting的详细介绍。 例如:(setting可以配置的所有属性) Example: { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_post_name : "Filedata", post_params : { "post_param_name_1" : "post_param_value_1", "post_param_name_2" : "post_param_value_2", "post_param_name_n" : "post_param_value_n" }, use_query_string : false, requeue_on_error : false, http_success : [201, 202], assume_success_timeout : 0, file_types : "*.jpg;*.gif", file_types_description: "Web Image Files", file_size_limit : "1024", file_upload_limit : 10, file_queue_limit : 2, debug : false, prevent_swf_caching : false, preserve_relative_urls : false, button_placeholder_id : "element_id", button_image_url : "http://www.swfupload.org/button_sprite.png", button_width : 61, button_height : 22, button_text : "<b>Click</b> <span class="redText">here</span>", button_text_style : ".redText { color: #FF0000; }", button_text_left_padding : 3, button_text_top_padding : 2, button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES, button_disabled : false, button_cursor : SWFUpload.CURSOR.HAND, button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT, swfupload_loaded_handler : swfupload_loaded_function, mouse_click_handler : mouse_click_function, mouse_over_handler : mouse_over_function, mouse_out_handler : mouse_out_function, file_dialog_start_handler : file_dialog_start_function, file_queued_handler : file_queued_function, file_queue_error_handler : file_queue_error_function, file_dialog_complete_handler : file_dialog_complete_function, upload_start_handler : upload_start_function, upload_progress_handler : upload_progress_function, upload_error_handler : upload_error_function, upload_success_handler : upload_success_function, upload_complete_handler : upload_complete_function, debug_handler : debug_function, custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } } 设置参数的详细描述 Settings Description 【新】upload_url 默认值:空字符串 upload_url设置接收的是一个绝对的或者相对于SWF文件的完整URL。推荐使用完整的绝对路径,以避免由浏览器和FlashPlayer修改了基准路径设置而造成的请求路径错误。(yukon:这其实是相对的,如果你的swfupload和php上传文件处理页面始终是放在同一个网站文件夹里,我倒是推荐用相对路径) 如果设置对象的属性preserve_relative_urls为false,SWFUpload将会把相对路径转化成绝对路径,来避免URL在不同系统的flash player中被解析成各种不同的格式。如果你禁用SWFUploads的这个转换,应该使用相对路径来设定swfupload.swf的位置 注意:这里需要考虑FlashPlayer的安全域模型。 file_post_name 默认值:Filedata file_post_name参数允许你设置POST信息中上传文件的name值(类似传统Form中设置了<input type="file" name="Filedata"/>的name属性)。 注意:(2.5版待定)在Linux下面此参数设置无效,接收的name总为Filedata,因此为了保证最大的兼容性,建议此参数使用默认值。 【新】post_params 默认值:空的Object对象 post_params定义了一些键/值对,允许在上传每个文件时候捎带地post给服务器。这个属性可以用一个js数组对象来赋值。键/值对必须是纯字符串或者数字。(可用js的 typeof()函数检测) 注意: Flash Player 8 不支持捎带发送post数据. SWFUpload 会自动的以一个query string的形式发送post_params。 use_query_string 默认值:false 该属性可选值为true和false,设置post_params是否以GET方式发送。如果为false,那么则以POST形式发送。 引进自v2.1.0 【新】preserve_relative_urls 默认值:false preserve_relative_urls可选值为boolean变量。指示SWFUpload是否将相对URL转换成绝对URL。如果设置为true,那么不会转换。默认为false。即自动转换。 requeue_on_error 默认值:false 该属性可选值为true和false。如果设置为true,当文件对象发生uploadError时(除开fileQueue错误和FILE_CANCELLED错误),该文件对象会被重新插入到文件上传队列的前端,而不是被丢弃。如果需要,重新入队的文件可以被再次上传。如果要从上传队列中删除该文件对象,那么必须使用cancelUpload方法。 跟上传失败关联的所有事件同样会被一一触发,因此将上传失败的文件重新入队可能会和Queue Plugin造成冲突(或者是自动上传整个文件队列的自定义代码)。如果代码中调用了startUpload方法自动进行下一个文件的上传,同时也没有采取任何措施让上传失败的文件退出上传队列,那么这个重新入队的上传失败的文件又会开始上传,然后又会失败,重新入队,重新上传...,进入了无止境的循环。 该设置是在v2.1.0中引入的。 http_success 默认值:[] 该数组可自定义触发success事件的HTTP状态值。200的状态值始终会触发success,并且只有200的状态会提供serverData。 当接受一个200以外的HTTP状态值时,服务端不需要返回内容。 【新】assume_success_timeout 默认值:0 assume_success_timeout设定SWFUpload将等待多少秒来检测服务器响应,超时将强制触发上传成功 (uploadSuccess)事件。这个属性是为了在 Flash Player的bug下正常工作。避免长时间的等待服务器响应,同时解决flash player在mac操作系统下无法使服务器返回内容的bug。 flash在最后一个uploadProgress事件被触发30秒后将忽略服务器的响应而强制触发上传成功事件。 如果assume_success_timeout被设置为0,将禁用这个特性。 SWFUpload将长时间等待 Flash Player来触发 uploadSuccess事件. file_types 默认值:*.* 设置文件选择对话框的文件类型过滤规则,该属性接收的是以分号分隔的文件类型扩展名,例如“ *.jpg;*.gif”,则只允许用户在文件选择对话框中可见并可选jpg和gif类型的文件。默认接收所有类型的文件。 提醒:该设置只是针对客户端浏览器的过滤,对服务端的文件处理中的文件类型过滤没有任何限制,如果你需要做严格的文件过滤,那么服务端同样需要程序检测。 file_types_description 默认值:All Files 设置文件选择对话框中显示给用户的文件描述。 file_size_limit 默认值:0 设置文件选择对话框的文件大小过滤规则,该属性可接收一个带单位的数值,可用的单位有B,KB,MB,GB。如果忽略了单位,那么默认使用KB。特殊值0表示文件大小无限制。 提醒:该设置只对客户端的浏览器有效,对服务端的文件处理没有任何限制,如果你需要做严格文件过滤,那么服务端同样需要程序处理。 file_upload_limit 默认值:0 设置SWFUpload实例允许上传的最多文件数量,同时也是设置对象中file_queue_limit属性的上限。一旦用户已经上传成功或者添加文件到队列达到上最大数量,那么就不能继续添加文件了。特殊值0表示允许上传的数量无限制。只有上传成功(上传触发了uploadSuccess事件)的文件才会在上传数量限制中记数。使用setStats方法可以修改成功上传的文件数量。 注意:该值不能跨页面使用,当页面刷新以后该值也被重置。严格的文件上传数量限制应该由服务端来检测、管理。 file_queue_limit 默认值:0 设置文件上传队列中等待文件的最大数量限制。当一个文件被成功上传,出错,或者被退出上传时,如果文件队列中文件数量还没有达到上限,那么可以继续添加新的文件入队,以顶替该文件在文件上传队列中的位置。如果允许上传的文件上限(file_upload_limit)或者剩余的允许文件上传数量小于文件队列上限(file_queue_limit),那么该值将采用这个更小的值。 flash_url 默认值:空字符串 设置绝对或者相对于此上传页面的完整URL,一旦SWFupload实例化以后,此设置不能再被修改。 提醒:测试发现使用setUploadURL方法是可以修改此设置的。 【新】flash9_url (v2.5.0新增) 支持 Flash Player 9的Flash 控件(swf) 绝对或相对的URL flash_width (v2.1.0已删除) Defines the width of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px. flash_height (v2.1.0已删除) Defines the height of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px. flash_color ( v2.2.0已删除) This setting sets the background color of the HTML element that contains the flash. The default value is '#FFFFFF'. Note: This setting may not be effective in "skinning" 1px flash element in all browsers. prevent_swf_caching 默认值:true (v2.2.0新增)该布尔值设置是否在Flash URL后添加一个随机值,用来防止浏览器缓存了该SWF影片。这是为了解决一些基于IE-engine的浏览器上的出现一个BUG。 提醒:SWFUpload是直接在flash_url后添加了一个swfuploadrnd的随机参数。如果你给定的flash_url中已经存在了GET类型的参数,那么就会出现两个问号连接符导致错误。 debug 默认值:false 该值是布尔类型,设置debug事件是否被触发。 注意:SWFUpload代码中是将此变量和字符串true做的恒等判断,因此它只认定true为DEBUG模式开启,如果设置为1,虽然JS认定是开启模式,并且在初始化完毕后会有生成Debug Console,但后续操作中FLASH不会输出调试信息。(因为我习惯用1和0代表布尔变量,因此一度疑惑为何Flash的debug信息无法输出。) button_placeholder_id 默认值:null (v2.2.0新增) 该必要参数指定了swfupload.swf将要替换的页面内的DOM元素的ID值。当对应的DOM元素被替换为SWF元素时,SWF的容器会被添加一个名称为"swfupload"的样式选择器供CSS自定义使用。 button_image_url 默认值:空字符串 (v2.2.0新增) V2.2.0版最大的改变就是引入了一个按钮到SWF中,利用该参数可以设置一个相对于该swf文件或者是绝对地址的图片(或者是SWF),作为按钮的UI展现。所有FLASH支持的图片类型都可以使用(gif,jpg,png,或者是一个SWF)。 该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片) button_width 默认值:1 (v2.2.0新增) 设置该SWF的宽度属性。 button_height 默认值:1 (v2.2.0新增)设置该SWF的高度属性(按钮图片高度的1/4) button_text 默认值:空字符串 (v2.2.0新增) 该属性设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合button_text_style参数来设置。关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation。 button_text_style 默认值:"color: #000000; font-size: 16pt;" (v2.2.0新增)此参数配合button_text参数,可以通过CSS样式来设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation button_text_top_padding 默认值:0 (v2.2.0新增) 设置Flash Button上文字距离顶部的距离,可以使用负值。 button_text_left_padding 默认值:0 (v2.2.0新增) 设置Flash Button上文字距离左侧的距离,可以使用负值。 button_action 默认值:SWFUpload.BUTTON_ACTION.SELECT_FILES(多文件上传) (v2.2.0新增) 设置Flash Button点击以后的动作。默认为SWFUpload.BUTTON_ACTION.SELECT_FILES,点击按钮将会打开多文件上传的对话框。如果设置为SWFUpload.BUTTON_ACTION.SELECT_FILE,则为单文件上传。如果设置为SWFUpload.BUTTON_ACTION.START_UPLOAD,则启动文件上传。 button_disabled 默认值:false (v2.2.0新增) 该布尔值设置Flash Button是否是禁用状态。当它处于禁用状态的时候,点击不会执行任何操作。 button_cursor 默认值:SWFUpload.CURSOR.ARROW(箭头光标) (v2.2.0新增) 此参数可以设置鼠标划过Flash Button时的光标状态。默认为SWFUpload.CURSOR.ARROW,如果设置为SWFUpload.CURSOR.HAND,则为手形 button_window_mode 默认值:SWFUpload.WINDOW_MODE.WINDOW (v2.2.0新增) 此参数可以设置浏览器具体以哪种模式显示该SWF影片。 custom_settings 默认值:空的Object对象 该属性接收一个Object类型数据,可用于安全地存储与SWFUpload实例关联的自定义信息,例如属性和方法,而不用担心跟SWFUpload内部的方法和属性冲突以及版本升级的兼容。 设置完毕以后,可以通过实例的customSettings属性来访问。 var swfu = new SWFUpload({ custom_settings : { "My Setting" : "This is my setting", myothersetting : "This is my other setting", integer_setting : 100, a_dom_setting : document.getElementById("some_element_id") } }); var my_setting = swfu.customSettings["My Setting"]); swfu.customSettings["My Setting"] = "This is my new setting"; swfu.customSetting.myothersetting = "another new value"; swfu.customSetting.integer_setting += 25; swfu.customSetting["a_dom_setting"].style.visibility = "hidden"; Event Handlers 默认值:null 剩下的设置定义的是一系列事件处理的回调函数,在SWFUpload的操作过程中相应的事件会被触发。如果你需要在这些回调中进行自定义操作,那么你应该在设置中定义对应的JavaScript函数。 【新】Support Object SWFUpload实例的support属性(其类型是一个对象)能确认SWFUpload的某些特性是否能被浏览器使用的某版本Flash Player支持 { load : bool, // 标示SWFupload是否能在当前版本的 Flash Player中载入 imageResize : bool, // 标示当前时候安装了Flash Player 10或更新版本的Flash Player,并且SWFUpload 是否支持客户端调节上传图片的大小。 } File Object File对象包含了一组可用的文件属性,很多处理事件都会传递一个File Object参数来访问该文件的相关属性。 { id : string, // SWFUpload控制的文件的id,通过指定该id可启动此文件的上传、退出上传等 index : number, // 文件在选定文件队列(包括出错、退出、排队的文件)中的索引,getFile可使用此索引 name : string, // 文件名,不包括文件的路径。 size : number, // 文件字节数 type : string, // 客户端操作系统设置的文件类型 creationdate : Date, // 文件的创建时间 modificationdate : Date, // 文件的最后修改时间 filestatus : number // 文件的当前状态,对应的状态代码可查看SWFUpload.FILE_STATUS } Stats Object 该对象提供了上传队列的状态信息,访问实例的getStats方法可获取此对象。 该对象包括下面属性: { in_progress : number // 值为1或0,1表示当前有文件正在上传,0表示当前没有文件正在上传 files_queued : number // 当前上传队列中存在的文件数量 successful_uploads : number // 已经上传成功(uploadSuccess触发)的文件数量 upload_errors : number // 已经上传失败的文件数量 (不包括退出上传的文件) upload_cancelled : number // 退出上传的文件数量 queue_errors : number // 入队失败(fileQueueError触发)的文件数量 所有这些属性的值都可以使用setStats方法来修改,除了in_progress 和 files_queued。 插件 SWFUpload Plug-ins SWFUpload v2.0版本之后引入了几个插件。它们帮助SWFUpload实现一些功能 大多数插件使用文档在js插件(plugin)文件夹里 SWFObject SWFObject插件使用 SWFObject library 来将 SWFUpload Flash组件(Component)插入页面 这个插件也提供文档结构载入完毕检测功能(Document Ready loading) 。(yukon:可能此功能像是jQery的$(document).ready())和flash版本检测功能。详细使用方法以文档的方式记录在此插件文件夹内。你最好不要使用 SWFObject的文档结构载入完毕检测功能( Document Ready loading)和其他库的相似功能混搭共同使用。只用其中的一个就可以了。 Flash Player 10: 由于 Flash Player 10要求使用一个按钮来触发影片的相关操作,如果这个按钮 (设置对象里的button_placeholder_id属性可标示它的id)被css之类的设置成hidden或者display:none,SWFUpload将加载失败 。 Cookies 为了解决Flash Cookie的 Bug,Cookies插件将自动获取你浏览器的cookie,并随上传发送。cookie将以 POST or GET 形式随上传url发送。 此插件以POST或GET方式发送cookie的键/值对.在服务器端它们不会以cookie形式来解析。某些自动检测cookie来确认session和身份授权的框架可能并不能获取此插件传递的值。 Queue Handling Queue Handling插件提供队列处理功能。比如整个队列的上传,整个队列的取消,入队后自动开始上传。 Speed speed插件扩展了'file' 对象的几个属性用以描述当前上传情况。此插件包含了当前速度( current speed),平均速度( average speed),已上传时间( elapsed time),预计还需的时间( remaining time)等值。 已知的问题 Known Issues Flash Player以及许多浏览器的bug 困扰着SWFUpload. 但是我们一直在努力。 linux上的取消 Cancelling in Linux 使用Flash 9 Player以及更早版本,在linux操作系统上执行取消上传功能将可能导致浏览器崩溃。不过新版本的Flash Player改善了这个问题。 linux上的上传进度 Upload Progress in Linux linux上的 Flash Player只在上传完毕后发出一次上传进度事件 (uploadProgress) ,而不是像windows里那样上传过程中不断发出。 这是由于一些linux分发版会在上传过程中锁定整个浏览器。 MAC上的上传进度 Upload Progress in OS X 我们收到了一些关于MAC操作系统上Flash Player不能触发uploadProgress事件的报告。详细的情况还有待了解,但请注意其潜在的问题 MIME Type 无论文件的实际MIME格式是什么,Flash Player以 mime格式application/octet-stream 上传所有的文件 文件最大可选择数 Maximum number of selected files Flash Player本身并没有限制可选择上传文件数的最大值,但是限制了总文件名的最大长度。这个字符串是这样组成的: "文件名"空格"文件名"...。能上传文件的个数取决于操作系统对文件名总长度的限制。如果用户选择了过多的文件,将会收到flash player的警告消息,并且显示在文件选择对话框里(yukon:我在xp一次上传了173个文件仍然没警告。。) 代理 Proxies Flash Player可能不能正常的使用代理。 它在处理代理验证时候有些问题,可能导致某些冲突。 有些杀毒软件使用一个本地客户端代理来接收上传的文件并进行扫描,(貌似是截获了上传文件,并把它写入一个代理服务器,扫描完毕后才会真正发送给目标服务器)这导致SWFUpload错误的以为整个文件被上传了,它将的发出大量的uploadProgress事件,直到100%完毕。当代理真正地上传给目标服务器的过程中,SWFUpload看起来像是被暂停了。 卡巴斯基杀毒软件:卡巴斯基 (和其他一些杀软)实现了一个用户端的代理,用来截获本地上传出的数据。SWFUpload不能检测这个代理系统的存在。这些代理服务器能非常快地接收上传的文件,扫描后再发送给目标文件。 apache安全模块 Apache mod_security Apache的安全模块 mod_security验证服务器收到的 POST消息. Flash Player实现了一个边缘化的方式 (an edge case 翻成取巧的方式?) (有个参数可以决定是否验证) POST 上传文件,服务器也实现了。 安全套接层协议层 SSL 我们收到一些报告称Flash Player 不能通过SSL来上传. 这个问题的具体情况还没被确认,但是看起来确实在ssl下上传并不可靠。特别是使用公匙-自签名证书(self-signed certificates)时会出现问题。 同样,由不被信任的签发机构CA发放的 SSL 证书不能被Flash接受。因为flash并没有提供一个这样的接收证书的方法。就像前面说的cookie bug,windows下的flash player只接收它所信任的名单中的CA发放的证书,而不管浏览器正在使用中的证书。 授权 Authentication HTTP 的授权验证机制不能被Flash Player良好的支持. 最新版本的 Flash Player会好一些,旧版本的可能会造成浏览器崩溃 。 过早终止连接 Prematurely terminated connections 过早终止连接 Prematurely ending the response (比如ASP.NET中的Response.end()方法) 会导致原本上传完毕,SWFUpload却报告上传失败。 文件的POST名 Filedata POST name in Linux 改变文件接收名 (默认 “Filedata” ,设置对象中file_post_name属性) 在Linux的 Flash Player中并不起作用. Cookie bug 在Windows 下非IE浏览器 (FireFox, Opera, Safari, etc) flash插件将会发送IE的cookie . 这破坏了很多服务器的session和授权验证机制 开发者必须自己手动解决传递 Session 和授权 cookie 信息的问题,还要自己手动修改在服务器上的session。如果他们想使用session。 不过SWFUpload软件包里提供了一个PHP 或 ASP.Net里解决此bug的例子代码。 ExternalInterface类的bug( ExternalInterface bugs) 当和浏览器/js交互时,Flash Player不能正确使用escape方法编码数据。SWFUpload为解决这个问题做了很大的努力。将来如果这个bug修复了,SWFUpload将会发送而外的escape编码数据. 超长服务器数据bug (Server Data length bugs) 过长的服务器响应数据在MAC或Linux系统中的Flash Player下会导致错误。数据可能会被裁短,改变或者某些重复。我们建议服务器发回的数据尽量的短小简明。 Avant Browser 一旦被缓存了,SWFUpload不能正确工作在Avant浏览器上. SWFUpload v2.2.0版本后添加了 prevent_swf_caching 设置来试图解决这个问题 . 文件选择对话框与页面改变 File Dialog & Page Changing 在出现文件选择对话框时离开或者刷新页面将会导致浏览器崩溃。(所有浏览器,所有操作系统下) 这种情况大多出现在你设定了一个超级链接<a>的“onclick”调用selectFile/selectFiles ,但又没有禁止它默认的转跳动作,点击这个超链的同时会跳到其他页面但同时又打开了文件选择对话框。。 (yukon:还有种可能:程序使页面强制刷新、重定向。比如HTML <meta>标签里的refresh, ASP.NET的Response.Redirect(),php的header()等) 服务器脚本执行时间过长 Long Running Upload Scripts Flash上传文件给web服务器后,上传接收程序就会被执行。 接收程序决定是否存储它们,创建缩略图,扫描病毒等等,如果接收程序30秒内不返回任何数据,Flash将断开链接,并返回一个IO错误。 如果你不想这样做,那么在处理的过程中,让服务器返回几个字符或者数据(如果你可以)。 比如PHP,虽然PHP脚本能在Flash断开后继续成功地完成操作,但断开之后Flash将不会接收到任何返回数据。 窗口模式 WMODE / BUTTON_WINDOW_MODE 在某些浏览器中,如果flash控件没有处于屏幕显示区域,设定的WMODE(由BUTTON_WINDOW_MODE设定)会阻止flash控件的载入。,只有当你拉动滚动条,让flash控件处于屏幕显示区域,才会加载并呈现。 (yukon:这样做是为了让页面尽快呈现,比如你打开一个存满图片的文件夹,查看方式调为缩略图,猛的下拉,会看见下面的图片文件逐渐显示出内容来) 这种特性可能会对SWFObject插件有不利的影响。SWFUpload事件可能不会被触发,按钮的背景图可能不会被载入除非控件呈现完毕。 某些操作系统中 (Linux ) 当 WMODE被设置为透明, Flash 打开的文件选择对话框会在浏览器窗口之后。 内存泄露 Memory Leaks 一些浏览器 (特别是 IE)不能在flash player用 ExternalInterface类与js交互后回收内存,(比如 SWFUpload). 生成过多的SWFUpload实例并且刷新几次页面将导致浏览器占用内存过多,进而导致浏览器崩溃或者其他一些系统错误。 在 v2.2.0版本的 SWFUpload中,我们实现了一些预防内存泄露的机制。但是还是推荐您在页面关闭时候调用destroy()方法。如果你在一个页面使用几百个SWFUpload实例,你必须小心测试以防内存泄露。 有关MAC操作系统的一些问题 Other Mac Issues 服务器返回的数据或 Mac系统上的 Flash Player 可能并不会触发 uploadSuccess 事件.我们添加了一个 assume_success_timeout 设置来帮助解决这个问题 。但是通常情况下,在接收成功后返回一个简短的字段是十分容易且可靠的。 有些用户反映在Mac系统下上传给含子域名的地址时有一些问题 有些用户反映重定向(HTTP 状态码 302) 不能被 Mac Flash Player很好的处理. Windows 下似乎没这个问题. 302 重定向经常用在一些授权模式和MVC设计框架中。 flash的开发文档指出 在早于 OS X 10.3版本的系统中, bytes loaded 一直会是 -1. SWFUpload把它改成了 0,但是 total bytes将不会被发送出来,进度永远到不了100% 。因此请设定在上传完毕,发出uploadSuccess 或 uploadComplete事件时更新UI让其显示100%。以此来让UI在各系统统一。 有些用户反映Mac Flash Player上传路径有空格字符时将出现问题. 请将它们替换成+或者%20 有些用户反映Mac Flash Player 会在 HTTP HOST头里加入端口号 (比如 http://www.example.com:80). 如果你检查这个参数,要小心对付这个问题。 文件如果只包含一个资源分支(resource fork),将会被Flash Player以0字节文件对待,不能上传(提示: Flash Player 10.1可能解决了这个问题) 本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html,如需转载请自行联系原作者
文章
Web App开发  ·  存储  ·  JavaScript  ·  前端开发  ·  内存技术
2017-11-26
SWFUpload 2.5.0版 官方说明文档 中文翻译版
SWFUpload v2.5.0 Documentation SWFUpload 2.5.0版 官方说明文档 中文翻译版 Table of Contents 内容列表 详情请点击翻译:yukon12345 2010.6.10   SWFUpload SWFUpload 版本 2 概览 (Overview) 入门( Getting Started) js对象 (SWFUpload JavaScript Object) 构造器(Constructor) 全局变量和常量 (Globals and Constants) 【新增内容】instances movieCount 【新增内容】QUEUE_ERROR 【新增内容】UPLOAD_ERROR 【新增内容】FILE_STATUS 【新增】UPLOAD_TYPE 【新增内容】BUTTON_ACTION 【新增内容】CURSOR 【新增内容】BUTTON_WINDOW_MODE 【新增】RESIZE_ENCODING 【新增】onload 属性 Properties 【新增内容】customSettings movieName 方法 Methods addSetting 不推荐 (deprecated) getSetting 不推荐 (deprecated) retrieveSetting 已移除 (removed in v2.1.0) destroy 添加自2.1.0 (added in v2.1.0) displayDebugInfo selectFile selectFiles startUpload 【新增】startResizedUpload (added in v2.5.0) cancelUpload stopUpload 【新增】requeueUpload getStats setStats getFile 【新增】getQueueFile (added in v2.5.0) addPostParam removePostParam addFileParam removeFileParam setUploadURL setPostParams setFileTypes setFileSizeLimit setFileUploadLimit setFileQueueLimit setFilePostName setUseQueryString setDebugEnabled setButtonImageURL (added in v2.2.0) setButtonDimensions (added in v2.2.0) setButtonText (added in v2.2.0) setButtonTextStyle (added in v2.2.0) setButtonTextPadding (added in v2.2.0) setButtonDisabled (added in v2.2.0) setButtonAction (added in v2.2.0) setButtonCursor (added in v2.2.0) 【新增内容】事件 Events flashReady 【新增】swfUploadPreload 【新增】swfUploadLoadFailed 【新增】swfUploadLoaded 【新增】buttonAction fileDialogStart fileQueued 【新增内容】fileQueueError fileDialogComplete 【新增】uploadResizeStart uploadStart uploadProgress uploadError 【新增】uploadSuccess uploadComplete debug 实用功能对象 SWFUpload Utility Objects Settings Object Settings Description 【新】Support Object File Object Stats Object 相关插件 SWFUpload Plug-ins 【新增内容】已知问题 Known Issues SWFUpload SWFUpload 最初是Vinterwebb.se 开发的客户端文件上传工具。它联合javascript和flash,在浏览器中提供一个优于传统上传标签 <input type="file" /> 的功能(和良好的用户体验)。 SWFUpload 的主要特性: 文件浏览对话框中可以选择多个文件 AJAX风格的上传,不用重刷新 上传过程中的各种事件. 可以在客户端调节图片大小 它使用的类命名空间兼容各种js库(i.e., jQuery, Prototype, 等.). 支持 Flash 9 and Flash 10 (2.2.0版本后取消对flash 8的支持) SWFUpload 的设计理念与其他基于flash的上传工具不同。SWFUpload 给开发者尽可能多的UI控制能力. 开发者可以使用 XHTML, CSS, JavaScript 来使它更符合自己网站的样式风格. 它提供一组简单的js事件更新上传状态,开发者可以根据这些事件来在网页中显示文件上传进度 不过不幸的是 Flash Player 10 迫使我们不得不用一个按钮(点击后)才能触发文件选择对话框,但SWFUpload允许开发者用js来修改这个按钮的文字等外观。 SWFUpload v2 SWFUpload v2 包含了许多新的特性,增强的稳定性,解决了Flash Player 中的一些bug,提供了一些有用的插件(Plug-ins). 新特性包括: 可利用Flash Player 10 安全特性. 可以随上传来POST额外的数据 针对每一个文件上传发送POST数据 完善的各种事件组. 所有设置,参数,都可以灵活配置. 可获取服务器回传的数据. 可暂停正在上传的文件,而不是取消. 任意修改上传的次序. 可提供单一或多文件的选择对话框. 可限制上传文件队列长度,文件大小,上传文件个数 可更好地处理0字节文件. 每个文件都有上传确认事件. Overview HTML Upload 标准的HTML上传框只提供一个按钮和一个文本框让用户选择单个文件。然后通过表单提交。整个文件必须等到它上传完毕后才能确认并检查文件大小,文件扩展名,而且上传的过程中,回传反馈很少。这就造成了一些使用上的不便利。 但传统的HTML上传十分简单,单一步骤,所有浏览器都支持它。 SWFUpload SWFUpload 使用Flash 影片(flash movie) 来选择和上传文件。影片里有一个可定制的按钮来激活文件选择对话框。文件选择对话框允许用户选择单一的文件或者多个文件。 选择的的文件类型也是可以被限制的,开发人员可以限定用户只能选择指定的适当的文件,例如*.jgp;*.gif。 一旦选择并点击确定,每个文件都会被验证,并放入队列。当Flash上传文件的时候,由开发人员预定义的Javascript事件会被触发以便来更新页面中的UI显示,并且还能实时提供上传状态和错误信息。 文件的上传是独立于页面和表单的。每个文件单独的上传到处理页面,这就使服务器可以简单轻松地处理文件。flash提供的上传服务使得整个页面不必提交或者刷新。这有点像AJAX程序。页面中的Form表单数据会和FLASH控制的文件上传单独处理。 入门 Getting Started SWFUpload 不是拖放式的上传控件。因此需要一些dom和js的知识。几个demo将会展示swfUpload的能力以及如何使用它们完成任务。 SWFUpload 包含4部分: 初始化和设置 (JavaScript) JavaScript 库: SWFUpload.js Flash控件: swfupload.swf 和 swfupload_fp9.swf 事件处理机制 (JavaScript) 许多使用 SWFUpload 的问题都出在设置上。错误的事件处理, Flash/浏览器的Bug,或者服务器配置。 初始化和设置 Initialization and Settings SWFUpload 必须在页面上初始化.它通常在js的window.onload事件里完成. SWFUpload 的构造函数需要获取一个Object类型的对象(js). 这个对象的数据直接的传递给构造函数. 初始化的SWFUpload对象的引用(reference)应该保存好,(yukon:即用变量存储起来.如例子中的swfu)因为在启动文件上传以及控制其他特性的时候也需要这个引用。 例子:初始化SWFUpload时直接传入一个匿名对象来配置参数 var swfu; window.onload = function () { swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", //处理上传文件的地址 flash_url : "http://www.swfupload.org/swfupload.swf", //核心功能swf的地址 flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" //文件大小限制 }); }; 例子: 也可以在初始化SWFUpload时使用一个对象变量(settings_object)传入配置参数 var swfu; window.onload = function () { var settings_object = { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" }; swfu = new SWFUpload(settings_object); }; js库 JavaScript library 如果想使用swfupload, js库文件(swfupload.js) 必须被引入到使用的页面中. 一旦 SWFUpload 对象被创建,就可以访问许多功能函数。开发者可以以此来控制SWFUpload。 例: 如何引入swfupload.js库 <script type="text/javascript" src="http://www.swfupload.org/swfupload.js"></script> 例: 按需初始化 SWFUpload. var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", button_placeholder_id : "spanSWFUploadButton" //yukon:这里有个新参数,将会使用js在id为“spanSWFUploadButton”的标签容器如span,div中创建一个“选择”按钮 }); 【新增内容】flash控件 Flash Control SWFUpload js库能动态的加载 Flash 控件 (swfupload.swf 或 swfupload_fp9.swf). Flash控件的文件地址在初始化的时候就必须在SWFUpload设置对象中定义。 Flash控件实际上是个Flash小影片,它可以控制文件的选择,验证和上传。 它在页面中展现给用户的是一个UI可自定制的按钮,并且能检测Flash Player的版本(9,10)自动加载适合用户播放器版本的flash控件 使用 flash_url 和 flash9_url 可以设置swfupload.swf 或者 swfupload_fp9.swf 的路径。(yukon:前面几个例子已经有写了) 事件处理 The Event Handlers 开发者必须创建一组js函数来处理SWFUpload的事件. 当各种重要的事件发生的时候,这些函数会被触发执行。 通过处理SWFUpload的事件,开发人员能够提供关于上传进度、出错信息以及上传完成等的信息反馈。注意:开发人员不要重写了存储在SWFUpload.prototype的函数。 例: SWFUpload事件处理和初始化. // 上传开始(uploadStart)事件处理函数. 设置对象的“upload_start_handler”属性的值应是此函数的名字 var myCustomUploadStartEventHandler = function (file) { var continue_with_upload; if (file.name === "the sky is blue") { continue_with_upload = true; } else { continue_with_upload = false; } return continue_with_upload; }; // 上传成功( uploadSuccess )事件处理函数. 设置对象的“upload_success_handler”属性的值应是此函数的名字 var myCustomUploadSuccessEventHandler = function (file, server_data, receivedResponse) { alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data); }; // Create the SWFUpload Object var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "200 MB", upload_start_handler : myCustomUploadStartEventHandler, upload_success_handler : myCustomUploadSuccessEventHandler swfupload js 对象 SWFUpload JavaScript Object 构造函数 Constructor SWFUpload(settings object) //SWFUpload(设置对象) 返回: 一个SWFUpload 实例 var swfupload_instance = new SWFUpload(settings_object); 全局变量和常量 Globals and Constants SWFUpload定义了一些全局变量和常量,这对SWFUpload的高级应用和处理错误都是很有用的,它们都是只读的。 【新增内容】SWFUpload.instances SWFUpload.instances 是存贮着一个页面中所有SWFUpload实例引用的数组对象。Flash Player依靠这个对象数组来调用正确的事件处理函数。SWFUpload.instances对象数组的索引(SWFUpload.instances[index])是属性movieName。 SWFUpload.movieCount SWFUpload.movieCount 是一个全局变量,记录页面中已创建了多少个SWFUpload对象实例,并用来确保每个flash影片均被赋予一个唯一的movieName. 【新增内容】SWFUpload.QUEUE_ERROR SWFUpload.QUEUE_ERROR 是一个简单的js对象,包含了队列错误码(Queue Error code)的常量。用来决定当文件队列错误(fileQueueError)发生时,将发送什么错误码。 SWFUpload.QUEUE_ERROR = { QUEUE_LIMIT_EXCEEDED : -100, FILE_EXCEEDS_SIZE_LIMIT : -110, ZERO_BYTE_FILE : -120, INVALID_FILETYPE : -130 }; QUEUE_LIMIT_EXCEEDED - 指出用户入队过多,超过队列最大长度。不过一旦在队列中的文件被上传或者删除,用户仍然可以添加文件到文件上传等待队列中。 FILE_EXCEEDS_SIZE_LIMIT -指出超过了所限制的文件大小(file_size_limit). ZERO_BYTE_FILE - 指出选择的文件时0字节的。Flash Player不能处理空文件。上传Windows快捷方式图标也会触发这个错误。 INVALID_FILETYPE - 指出选择的文件扩展名与允许不符。用户手工输入扩展名不符的文件名,而不是用鼠标点击选择文件的时候就有可能触发这个错误。 【新增内容】SWFUpload.UPLOAD_ERROR SWFUpload.UPLOAD_ERROR 也是一个简单的js数组对象,它包含了上传错误码常量(Upload Error code constants).用来决定当上传错误(uploadError)事件发生时发送什么错误码. SWFUpload.UPLOAD_ERROR = { HTTP_ERROR : -200, MISSING_UPLOAD_URL : -210, IO_ERROR : -220, SECURITY_ERROR : -230, UPLOAD_LIMIT_EXCEEDED : -240, UPLOAD_FAILED : -250, SPECIFIED_FILE_ID_NOT_FOUND : -260, FILE_VALIDATION_FAILED : -270, FILE_CANCELLED : -280, UPLOAD_STOPPED : -290 }; HTTP_ERROR - 尝试上传给服务器,但服务器没有返回200状态码(200表示无异常) MISSING_UPLOAD_URL - 没有设置上传地址(upload_url). IO_ERROR - 当读取和发送文件时出现了一些错误。通常发生在服务器非预期地关闭了终端连接的时候。 SECURITY_ERROR - 安全错误,上传违反了安全约束。比较少见。 UPLOAD_LIMIT_EXCEEDED - 用户尝试上传比预设数多的文件 UPLOAD_FAILED - 尝试初始化上传时出现了错误。比较少见。 SPECIFIED_FILE_ID_NOT_FOUND - 一个文件开始上传,但没有找到这个文件。(yukon:文件选择完并添加到队列后,用户又在磁盘上改了文件名或者删除了文件等) FILE_VALIDATION_FAILED - 当上传开始时传回了某错误 FILE_CANCELLED - 取消了上传(调用了cancelUpload函数) UPLOAD_STOPPED - 暂停了上传(调用了stopUpload函数) RESIZE_ERROR - 当调整图像大小时出现了某错误 【新增内容】SWFUpload.FILE_STATUS SWFUpload.FILE_STATUS 是一个js数组对象,包含了文件状态码常量( File Status code constants). 用来检测File对象的属性file status SWFUpload.FILE_STATUS = { QUEUED : -1, IN_PROGRESS : -2, ERROR : -3, SUCCESS : -4, CANCELLED : -5 }; QUEUED - 指示此文件正在等待上传队列中 IN_PROGRESS - 指示此文件现在正在上传中 ERROR - 指示此文件引发了一个队列或上传错误 COMPLETE - 指示此文件已成功传输给服务器 CANCELLED - 指示此文件被取消上传(调用了cancelUpload函数). 【新增】SWFUpload.UPLOAD_TYPE[作用:确定上传类型] SWFUpload.UPLOAD_TYPE 是一个js数组对象,包含了上传类型常量(Upload Type constants). 用于检测File对象的上传类型属性( upload type property) NORMAL - 普通的SWFUpload 上传 RESIZED - 被调整大小的图片上传,数据以HTTP的post方式发送。 【新增内容】SWFUpload.BUTTON_ACTION[作用:决定点击按钮后执行的动作] SWFUpload.BUTTON_ACTION 是一个js数组对象,包含了按钮动作码常量(button action code constants). 用于按钮动作(button_action)的值设置,从而可设置flash影片中的那个交互式按钮对各种鼠标动作的的相关响应. SWFUpload.BUTTON_ACTION = { SELECT_FILE : -100, SELECT_FILES : -110, START_UPLOAD : -120 } SELECT_FILE - 点击按钮时,打开单一文件选择对话框。(js设定的)鼠标点击事件不会被触发 SELECT_FILES - 点击按钮时,打开多文件选择对话框。(js设定的)鼠标点击事件不会被触发 START_UPLOAD - 点击按钮时,在上传队列的第一个文件将被上传。(js设定的)鼠标点击事件不会被触发 NONE - 这种情况下,(js设定的)鼠标点击事件会被触发 JAVASCRIPT - 和NONE相同。这个值已被弃用 【新增内容】SWFUpload.CURSOR[作用:改变鼠标样式] SWFUpload.CURSOR 是一个js数组对象,包含了按钮光标常量。用于按钮光标 (button_cursor)的值的设置,从而改变鼠标指向按钮时,鼠标的样式。 SWFUpload.CURSOR = { ARROW : -1, HAND : -2 } ARROW - 光标呈现成箭头指针 HAND - 光标呈现成手型 【新增内容】SWFUpload.WINDOW_MODE[作用:影片的显示模式] SWFUpload.WINDOW_MODE 是一个js数组对象,包含了按钮影片窗口模式参数常量(button movie wmode parameter constants). 用于告诉浏览器如何呈现flash影片。 有些 WINDOW_MODE/WMODE 设置会导致一些浏览器问题 具体请看 Known Issues. SWFUpload.WINDOW_MODE = { WINDOW : "window", TRANSPARENT : "transparent", OPAQUE : "opaque" }; WINDOW 是默认模式. flash影片绘制在页面的最上层. OPAQUE 允许页面其他元素遮盖这个按钮影片。 TRANSPARENT 透明。按钮的背景呈透明状,允许html元素在它下面显示 【新增】SWFUpload.RESIZE_ENCODING[作用:指出图片编码格式] SWFUpload.RESIZE_ENCODING 是一个js数组对象,包含了大小调整类型常量( resize encoding type constants).用以指出被大小调整的图片的编码格式 JPEG - JPEG编码格式 PNG - PNG 编码格式 【新增】SWFUpload.onload [作用:定义页面加载完毕后的操作函数] onload 是一个可以通过swfobject的addDOMLoadEvent方法执行的函数. 你通过这个方法,在页面加载完毕之后可以执行你的脚本程序。不过你应该确定你没有使用其他类似的方法 (比如 jQuery框架的 “Ready” 或者 Prototype库中的 dom:loaded). SWFUpload.onload = function () { new SWFUpload(settingsObject); } 上面一个例子将在最早的浏览器加载事件中初始化SWFUpload。大多DOM准备完毕事件(DOMReady event)的执行时紧随window.onload事件之后。 属性 Properties 请遵循下面的属性列表描述来使用这些属性。如果把错误的使用一个只读或只写属性属性,将会导致SWFUpload错误. 【新增内容】customSettings (可读写)[作用:开发人员自定义设置] “自定义设置”属性( customSettings)是一个js空对象。用以存储与一个SWFUpload实例有关的数据。 它的内容可以使用设置对象中的custom_settings属性来初始化。 Example: // 初始化 SWFUpload 对象时使用一些自定义设置 var swfu = new SWFUpload({ custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } }); swfu.customSettings.custom_setting_1 = "custom_setting_value_1"; // 改变一个已有的自定义设置 swfu.customSettings.myNewCustomSetting = "new custom setting value"; // 添加一个新的自定义设置 // 用一个全新的对象来重写自定义设置 swfu.customSettings = { custom_setting_A : "custom_setting_value_A", custom_setting_B : "custom_setting_value_B" }; 存储在自定义设置对象(customSettings object)的值可以轻松地被事件处理函数访问:(yukon:这个属性是利用js的动态特性,给开发者高度的开发自由) function uploadSuccess(file, serverData, receivedResponse) { if (this.customSettings.custom_setting_A === true) { alert("Checked the custom setting!"); } } movieName (只读)[作用:存储一个swfload实例的唯一标示] 包含了某SWFUpload实例的唯一标示名. 这个值可传递给Flash,以帮助as-js之间的交互。用于索引存储在SWFUpload.instances数组的实例. 你不应该也不能改变它。 方法 Methods 下面的方法用于操作SWFUpload. 有些方法可以与DOM元素的单击事件绑定,其它的方法供SWFUpload内部处理事件中调用。 object addSetting(setting_name, value, default_value) 不赞成使用 The addSetting function sets a setting value. If the value is undefined then the default_value is used. The function is used by SWFUpload addSetting returns the value that was stored in the setting. object getSetting(setting_name) 不赞成使用 The getSetting function retrieves the value of a setting. If the setting is not found an empty string is returned. object retrieveSetting(setting_value, default_value) 在 v2.1.0 中移除 The retrieveSetting function is similar to the addSetting function except it does not modify the internal settings object. retrieveSetting returns the setting_value unless it is undefined in which case it returns the default_value This is a utility function. bool destroy() [作用:销毁一个SWFUpload实例] 自 v2.1.0 添加 移除一个SWF的DOM元素,并且销毁SWFUpload的内部引用. 用以彻底删除页面中的一个SWFUpload实例. 防止在ie中的内存泄露问题 如果成功移除,返回true,如果出现任何导致SWFUpload实例的状态出现错误的问题,将返回false(Returns false if any error occurs leaving the SWFUpload instance in an inconsistent state). void displayDebugInfo()[作用:输出调试信息] 在debug事件中displayDebugInfo()输出SWFUpload 设置. 如果在初始化时候debug setting被设置为true,这个函数会被自动的调用。 void selectFile() 不推荐. 不兼容 Flash Player 10. selectFile causes the Flash Control to display a File Selection Dialog window. A single file may be selected from the Dialog window. Calling selectFile begins the File Event Chain. void selectFiles() 不推荐. 不兼容Flash Player 10. selectFiles causes the Flash Control to display a File Selection Dialog window. A multiple files may be selected from the Dialog window. Calling selectFiles begins the File Event Chain. void startUpload(file_id)【作用:开始上传文件】 startUpload接收file_id来上传文件。如果不传给它file_id值,那么将默认上传待上传队列的第一个文件 调用startUpload会触发上传事件链 (the Upload Event Chain). 【新增】void startResizedUpload(file_id, width, height, encoding, quality, allowEnlarging)【作用:附带调整图片大小功能的上传】 startResizedUpload 接收file_id参数来上传文件. SWFUpload尝试调整文件长宽等设置(如果是flash支持的图片格式) .如果图片格式不被支持,会引发一个上传错误(uploadError). width和height参数用来设定图片最大宽和高。但调整过程中会保持图片宽高比。 encoding的值必须是是存在SWFUpload.RESIZE_ENCODING中的常量. quality 只能用于调节JPEG格式图像的品质。接收范围是0-100。如果在这个范围外,会强制成0或100. allowEnlarging参数定义了SWFUpload是否允许将原图像扩大。(默认为true)如果原图像的长宽小于前面所说的width和height。如果设置其值为false的话,图像仍然会被编码,但不会将它扩大。 调用startResizedUpload方法会引发一个普通的上传事件链锁 . 但是Flash Player不会定时地提供 uploadProgress 事件. SWFUpload只会发送 模拟 0% 和 100% 的上传过程事件(uploadProgress events). 被调节大小的图片以POST方式传递数据,(而不是像FILE那样) 因为Flash Player 10引入了安全特性 .附带调整图片大小功能的上传的php处理页面和普通的上传php处理页面有所不同: $resizedImageData = $_POST["Filedata"]; // 服务器端以$_POST方式接收数据而不是 $_FILE $fileHandle = fopen("image.jpg", "w"); //以file系列操作函数来存储图片 fwrite($fileHandle, $resizedImageData); fclose($fileHandle); void cancelUpload(file_id, trigger_error_event)【作用:移除一个上传】 cancelUpload接收file_id 参数来移除一个文件的上传.这个文件会被移除出待上传队列 . 如果不给它file_id,默认上传队列中的第一个文件将会被取消. 可选参数trigger_error_event如果被设置为false,uploadError事件将不会被触发. void stopUpload()【作用:停止上传文件】 stopUpload停止当前正在上传的文件,并且把它还原到待上传队列中。(yukon:和移除不同,就是取消这个文件的上传,但不会移除出上传队列) 调用stopUpload时,如果有正在上传的文件,uploadError事件会被触发;如果此时没有正在上传文件,那么不会发生任何操作,也不会触发任何事件。 【新增】bool requeueUpload(file_id or index)【作用:重新入队】 requeueUpload将之前曾经入队的文件重新加入等待上传队列 如果文件没有找到,或者正在被上传,会返回false 注意:被重新入队的文件不会被再一次检查文件大小,队列大小,总上传个数或其他限制,只会把文件添加到队列中,如果这个文件引用仍然存在 object getStats()【作用:返回当前状态对象】 返回状态对象(stats object). void setStats(stats_object)【作用:设置或修改状态对象】 设置或修改状态对象( Stats Object) . 如果你在上传完毕后改变上传成功数,上传失败数,你可以使用此方法 object getFile(file_id|index)【作用:在队列中获取特定文件对象】 getFile通过接收file id (某个文件对象的id) 或者 file index (某个文件对象的index属性),返回在队列中的文件对象. 当给getFile传递一个file_id,只有在队列中的文件才可能被获取,如果找不到文件,将返回null 当给getFile传递一个index,所有尝试入队的(包括哪些入队时产生了错误的文件)将可能被获取。如果index索引超出范围,会返回null 【新增】object getQueueFile(file_id|index)【作用:返回等待上传队列中特定的文件对象】 getQueueFile 用来从等待上传队列中返回单个文件对象。 具体是通过接收file id (某个文件对象的id) 或者 file index (某个文件对象的index属性),返回在队列中的文件对象.index 索引从0开始计算. 当给 getQueueFile传递一个file_id,只有在等待上传队列中的文件才可能被获取,如果找不到文件,将返回null 当给 getQueueFile传递一个index,只有在等待上传队列中的文件才可以被获取 例如: getQueueFile(0) 返回一个在等待上传队列首部的文件对象. 如果调用了startUpload函数,它将在当前上传文件上传完毕后被上传。 (yukon:上面2个方法的区别可能是:getFile是获取文件队列中的文件。包括已上传的,错误的,等待上传的队列。而getQueueFile只获取等待上传队列中的文件) void addPostParam(name, value)【作用:添加一个键/值对】 addPostParam 添加一个键/值对,在每个的文件被上传时以POST方式捎带发送 它对应着post_params设置中的相同键值对。如果post_params中已经存在该值,那么实际上会被覆盖。 void removePostParam(name)【作用:移除一个键/值对】 removePostParam 移除一个键/值对,这个键值对之前将在每个的文件被上传时以POST方式捎带发送 它对应着post_params设置中的相同键值对。如果post_params中已经存在该值,那么实际上会被移除。 bool addFileParam(file_id, name, value) 为指定file_id的某一文件对象添加一个POST键/值对,如果添加的name属性已经存在,那么原值会被覆盖。 如果需要给所有文件对象添加POST值,那么可以使用设置中的post_params属性。 bool removeFileParam(file_id, name) 删除由addFileParam添加的POST值对. 如果POST设置中没有此属性,那么返回false void setUploadURL(url) 动态修改设置中的upload_url属性。 void setPostParams(param_object) 动态修改post_params,以前的属性全部被覆盖。param_object必须是一个JavaScript的基本对象,所有属性和值都必须是字符串类型。 void setFileTypes(types, description) 动态修改设置中的file_types 和 file_types_description,两个参数都是必须的 void setFileSizeLimit(file_size_limit) 动态修改设置中的file_size_limit,此修改针对之后的文件大小过滤有效。file_size_limit参数接收一个单位,有效的单位有B、KB、MB、GB,默认单位是KB。 例如: 2147483648 B, 2097152, 2097152KB, 2048 MB, 2 GB void setFileUploadLimit(file_upload_limit) 动态修改设置中的file_upload_limit,特殊值0表示无限制。 提醒:这里限制的是一个SWFUpload实例控制上传成功的文件总数。 void setFileQueueLimit(file_queue_limit) 动态修改设置中的file_queue_limit,特殊值0表示无限制。 提醒:这里限制的是文件上传队列中(入队检测通过的文件会添加到上传队列等待上传)允许排队的文件总数。. void setFilePostName(file_post_name) 动态修改设置中的file_post_name,注意在Linux环境下,FlashPlayer是忽略此设置的。 void setUseQueryString(use_query_string) 动态修改设置中的use_query_string,设置为true的时候,SWFUpload以GET形式发送数据,如果为false,那么就以POST发送数据。 void setDebugEnabled(debug_enabled) 动态启动/禁止 debug输出,debug_enabled参数是一个布尔值。 void setButtonImageURL(url) 动态修改按钮的图片。url参数是相对于该swf文件或者是绝对地址的图片(例如:以 /开始的相对路径或者是绝对路径:http://www.swfupload.org/buttonImage.png)。所有FLASH支持的图片类型都可以使用(gif,jpg,png)。 该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片) void setButtonDimensions(width, height) 动态修改SWF影片的尺寸以适应Button的图片大小。值必须是纯数值不能包括长度单位.高必须是整个图片按钮高的1/4,以此来保证显示的正确 void setButtonText(text) 动态设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合setButtonTextStyle方法来设置。如果文字过大,将会被隐藏超过的部分关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation。 void setButtonTextStyle(css_style_text) 配合setButtonText方法,可以通过CSS样式来动态设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation void setButtonTextPadding(left, top) 设置flash按钮文本的左边和右边的padding。值可以为负数 void setButtonDisabled(isDisabled) 当设置为 'true'是会禁用flash按钮,任何关于按钮的动作与操作都会被忽略。 void setButtonAction(buttonAction) 定义鼠标被点击后执行的动作。BUTTON_ACTION常量枚举中存储着这个方法可用的值 void setButtonCursor(buttonCursor) 设置鼠标指针指向按钮时的样式。CURSOR常量枚举中存储着这个方法可用的值 【新增内容】事件 Events SWFUpload在操作过程中会触发一系列事件,开发者可以利用这些回调的处理事件来控制UI,控制操作或者报告错误。 所有的事件都是在SWFUpload实例的上下文中调用的,因此在这些回调的事件中使用this能够直接访问到该触发该事件的实例对象。 所有事件应该在实例初始化时setting参数中预设完成。 【新:】 上传一个文件时,事件按照下面的顺序被调用(上传事件链): 附加调整图片大小功能的上传开始 uploadResizeStart 普通上传开始 uploadStart 正在上传中 uploadProgress (在上传文件的过程中重复的被调用着) 上传错误 uploadError (当出现某些错误时被调用, 上传文件将被取消或停止) 上传成功 uploadSuccess (成功的上传了文件,服务器接受到了可用数据) 完成了上传 uploadComplete (上传完成,SWFUpload 准备开始上传下一个) flashReady() 该事件函数是内部事件,因此不能被重写。加载的FLASH控件完成所有初始化操作时,将触发此事件来通知SWFUpload它可以接受各种命令了。 提醒:对应设置中的自定义事件swfupload_loaded_handler 【新增】 swfUploadPreload() swfUploadPreload 事件是 SWFUpload 已确认各项可用特性之后,Flash Movie加载完毕之前的这段时间内触发的事件.此事件的处理函数如果返回false,将停止加载swfupload。通常用在处理浏览器不支持某重要特性参数的情况 。 在设置对象的 swfupload_preload_handler 属性中可设置此事件处理函数 【新】swfUploadLoadFailed() 当页面不能正常加载flash影片的时候。通常是因为没有安装Flash Player或者它的版本低于 9.0.28 在设置对象的 swfupload_load_failed_handler 属性中可设置此事件处理函数 【新】swfUploadLoaded() swfUploadLoaded 事件在flash加载并准备完毕后被触发. 它是可设定的。 swfUploadLoaded 事件将会通知你flash加载完毕,能安全的执行各项方法了。 在设置对象的 swfupload_loaded_handler 属性中可设置此事件处理函数 【新】mouseClick() mouseClick事件在按钮被单击,(同时button_action setting的值为SWFUpload.BUTTON_ACTION.NONE,或者是flash按钮被设置为disable时)才被触发。 如果button_action settings的值为其他,或者flash按钮可用,这个事件都不被触发 在设置对象的 mouse_click_handler 属性中可设置此事件处理函数 【新】mouseOver() mouseOver事件将在鼠标在flash影片的任何部分移动时被触发 在设置对象的 mouse_over_handler 属性中可设置此事件处理函数 【新】mouseOut() mouseOut 事件再鼠标离开flash影片时被触发 在设置对象的 mouse_out_handler 属性中可设置此事件处理函数 fileDialogStart() 此事件在selectFile或者selectFiles调用后,文件选择对话框显示之前触发。只能同时存在一个文件对话框。但是,这个事件处理函数将不被执行,直到文件选择对话框被关闭 在设置对象的 file_dialog_start_handler 属性中可设置此事件处理函数 fileQueued(file object) 当选择好文件,文件选择对话框关闭消失时,如果选择的文件成功加入待上传队列,那么针对每个成功加入的文件都会触发一次该事件(N个文件成功加入队列,就触发N次此事件)。 对应设置中的自定义事件file_queued_handler 【新增内容】fileQueueError(file object, error code, message)   当选择文件对话框关闭时,如果选择的文件加入到上传队列中失败,那么针对每个出错的文件都会触发一次该事件(此事件和fileQueued事件是二选一触发,文件添加到队列只有两种可能,成功和失败)。 文件入队出错的原因可能有:1.超过了上传大小限制,2.文件为零字节,3.超过文件队列数量限制,4.允许外的无效文件类型。 (yukon:经测试,message所含的内容如下: 1.超过了上传大小限制:message=File size exceeds allowed limit. 2.文件为零字节:message=File is zero bytes and cannot be uploaded. 3.超过文件队列数量限制:message=int(指你设定的队列大小限制数) 4.允许外的无效文件类型:message=File is not an allowed file type. 如果你要改这些消息,请在开源包里的swfupload.as里改,然后重新编译成swfupload.swf。 ) 具体的出错原因可由error code参数来获取,error code的类型可以查看SWFUpload.QUEUE_ERROR中的定义。 提醒:对应设置中的自定义事件file_queue_error_handler 注意:如果选择入队的文件数量超出了设置中的数量限制,那么所有文件都不入队,此事件只触发一次。如果没有超出数目限制,那么会对每个文件进行文件类型和大小的检测,对于不通过的文件触发此事件,通过的文件成功入队。 fileDialogComplete(number of files selected, number of files queued, total number of files in the queued) 当选择文件对话框关闭,并且所有选择文件已经处理完成(加入上传队列成功或者失败)时,此事件被触发,number of files selected是选择的文件数目,number of files queued是此次选择的文件中成功加入队列的文件数目。 提醒:对应设置中的自定义事件file_dialog_complete_handler 注意:如果你希望文件在选择以后自动上传,那么在这个事件中调用this.startUpload() 是一个不错的选择。 如果需要更严格的判断,在调用上传之前,可以对入队文件的个数做一个判断,如果大于0,那么可以开始上传。 【新】uploadResizeStart(file object, width, height, encoding, quality) uploadResizeStart事件处理函数在一个图片开始调整大小时被调用。调整期间不提供progress事件和处理方法。 但是重新编码图片会花费一些时间 。如果这期间出现错误的话 uploadError事件将会被触发 当调整完成SWFUpload 继续触发 uploadStart事件,并且开始和普通上传一样的事件链. uploadStart(file object) 在文件开始向服务端上传之前触发uploadStart事件,这个事件处理函数可以完成上传前的最后验证以及其他你需要的操作,例如添加、修改、删除post数据等。 在完成最后的操作以后,如果函数返回false,那么这个上传不会被启动,如果返回true或者无返回,那么将正式启动上传。 提醒:对应设置中的自定义事件upload_start_handler uploadProgress(file object, bytes complete, total bytes) uploadProgress事件由flash控件定时触发,提供三个参数分别访问上传文件对象、已上传的字节数,总共的字节数。因此可以在这个事件中来定时更新页面中的UI元素,以达到及时显示上传进度的效果。 注意: 在Linux下,Flash Player只在整个文件上传完毕以后才触发一次该事件,官方指出这是Linux Flash Player的一个bug,目前SWFpload库无法解决。 提醒:对应设置中的自定义事件upload_progress_handler uploadError(file object, error code, message) 无论什么时候,只要上传被终止或者没有成功完成,那么uploadError事件都将被触发。error code参数表示了当前错误的类型,更具体的错误类型可以参见SWFUpload.UPLOAD_ERROR中的定义。Message参数表示的是错误的描述。File参数表示的是上传失败的文件对象。 例如,我们请求一个服务端的一个不存在的文件处理页面,那么error code会是-200,message会是404。 停止、退出、uploadStart返回false、HTTP错误、IO错误、文件上传数目超过限制等,都将触发该事件,Upload error will not fire for files that are cancelled but still waiting in the queue。(对于官方的这句话我还存在疑问,文件退出以后怎么还会保留在文件上传队列中保留呢?) 提醒:对应设置中的自定义事件upload_error_handler 注意:此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。 【新增内容】uploadSuccess(file object, server data, received response) 当文件上传的处理已经完成(这里的完成只是指向目标处理程序发送完了Files信息,只管发,不管是否成功接收),并且服务端返回了200的HTTP状态时,触发uploadSuccess事件。server data指的是服务器发出的一些数据(比如你自己echo出的)而received response是服务器自己发出的HTTP状态码 由于一些Flash Player的bug,HTTP状态码可能不会被获取到,从而导致uploadSuccess事件不能被触发。由于这个原因,2.50版在设置对象中增加了一个新属性assume_success_timeout 用来设置是否超过了等待接收HTTP状态码的最长时间,超过即触发 uploadSuccess。在这种情况下,(received response)参数会无效。 设置对象中的 http_success 允许设置在HTTP状态码为非200的其他值时也触发uploadSuccess事件。In this case no server data is available from the Flash Player. 在 提醒:对应设置中的自定义事件upload_success_handler 注意: server data是服务端处理程序返回的数据。 此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。 在window平台下,那么服务端的处理程序在处理完文件存储以后,必须返回一个非空值,否则此事件不会被触发,随后的uploadComplete事件也无法执行。 uploadComplete(file object) 当上传队列中的一个文件完成了一个上传周期,无论是成功(uoloadSuccess触发)还是失败(uploadError触发),uploadComplete事件都会被触发,这也标志着一个文件的上传完成,可以进行下一个文件的上传了。 如果要下个文件自动上传,那么在这个时候调用this.startUpload()来启动下一个文件的上传是不错的选择。不过要小心使用。参见注意 提醒:对应设置中的自定义事件upload_complete_handler 注意:当在进行多文件上传的时候,中途用cancelUpload取消了正在上传的文件,或者用stopUpload停止了正在上传的文件,那么在uploadComplete中就要很小心的使用this. startUpload(),因为在上述情况下,uploadError和uploadComplete会顺序执行,因此虽然停止了当前文件的上传,但会立即进行下一个文件的上传,你可能会觉得这很奇怪,但事实上程序并没有错。如果你希望终止整个队列的自动上传,那么你需要做额外的程序处理了。 debug(message) 如果debug setting设置为true,那么页面底部会自动添加一个textArea, 如果此debug事件没有被重写,那么SWFUpload库和Flash都会调用此事件来在页面底部的输出框中添加debug信息供调试使用。 提醒:对应设置中的自定义事件debug_handler 功能对象 SWFUpload Utility Objects 设置对象 Settings object 它是一个js的Object类型的变量,为SWFUpload的实例初始化提供配置。 其中的每一个配置属性都只能出现一次。 很多属性都是可选的,如果可选属性没有被配置,那么会使用SWFUpload库中默认指定的合适的值,具体可查看setting的详细介绍。 例如:(setting可以配置的所有属性) Example: { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_post_name : "Filedata", post_params : { "post_param_name_1" : "post_param_value_1", "post_param_name_2" : "post_param_value_2", "post_param_name_n" : "post_param_value_n" }, use_query_string : false, requeue_on_error : false, http_success : [201, 202], assume_success_timeout : 0, file_types : "*.jpg;*.gif", file_types_description: "Web Image Files", file_size_limit : "1024", file_upload_limit : 10, file_queue_limit : 2, debug : false, prevent_swf_caching : false, preserve_relative_urls : false, button_placeholder_id : "element_id", button_image_url : "http://www.swfupload.org/button_sprite.png", button_width : 61, button_height : 22, button_text : "<b>Click</b> <span class="redText">here</span>", button_text_style : ".redText { color: #FF0000; }", button_text_left_padding : 3, button_text_top_padding : 2, button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES, button_disabled : false, button_cursor : SWFUpload.CURSOR.HAND, button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT, swfupload_loaded_handler : swfupload_loaded_function, mouse_click_handler : mouse_click_function, mouse_over_handler : mouse_over_function, mouse_out_handler : mouse_out_function, file_dialog_start_handler : file_dialog_start_function, file_queued_handler : file_queued_function, file_queue_error_handler : file_queue_error_function, file_dialog_complete_handler : file_dialog_complete_function, upload_start_handler : upload_start_function, upload_progress_handler : upload_progress_function, upload_error_handler : upload_error_function, upload_success_handler : upload_success_function, upload_complete_handler : upload_complete_function, debug_handler : debug_function, custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } } 设置参数的详细描述 Settings Description 【新】upload_url 默认值:空字符串 upload_url设置接收的是一个绝对的或者相对于SWF文件的完整URL。推荐使用完整的绝对路径,以避免由浏览器和FlashPlayer修改了基准路径设置而造成的请求路径错误。(yukon:这其实是相对的,如果你的swfupload和php上传文件处理页面始终是放在同一个网站文件夹里,我倒是推荐用相对路径) 如果设置对象的属性preserve_relative_urls为false,SWFUpload将会把相对路径转化成绝对路径,来避免URL在不同系统的flash player中被解析成各种不同的格式。如果你禁用SWFUploads的这个转换,应该使用相对路径来设定swfupload.swf的位置 注意:这里需要考虑FlashPlayer的安全域模型。 file_post_name 默认值:Filedata file_post_name参数允许你设置POST信息中上传文件的name值(类似传统Form中设置了<input type="file" name="Filedata"/>的name属性)。 注意:(2.5版待定)在Linux下面此参数设置无效,接收的name总为Filedata,因此为了保证最大的兼容性,建议此参数使用默认值。 【新】post_params 默认值:空的Object对象 post_params定义了一些键/值对,允许在上传每个文件时候捎带地post给服务器。这个属性可以用一个js数组对象来赋值。键/值对必须是纯字符串或者数字。(可用js的 typeof()函数检测) 注意: Flash Player 8 不支持捎带发送post数据. SWFUpload 会自动的以一个query string的形式发送post_params。 use_query_string 默认值:false 该属性可选值为true和false,设置post_params是否以GET方式发送。如果为false,那么则以POST形式发送。 引进自v2.1.0 【新】preserve_relative_urls 默认值:false preserve_relative_urls可选值为boolean变量。指示SWFUpload是否将相对URL转换成绝对URL。如果设置为true,那么不会转换。默认为false。即自动转换。 requeue_on_error 默认值:false 该属性可选值为true和false。如果设置为true,当文件对象发生uploadError时(除开fileQueue错误和FILE_CANCELLED错误),该文件对象会被重新插入到文件上传队列的前端,而不是被丢弃。如果需要,重新入队的文件可以被再次上传。如果要从上传队列中删除该文件对象,那么必须使用cancelUpload方法。 跟上传失败关联的所有事件同样会被一一触发,因此将上传失败的文件重新入队可能会和Queue Plugin造成冲突(或者是自动上传整个文件队列的自定义代码)。如果代码中调用了startUpload方法自动进行下一个文件的上传,同时也没有采取任何措施让上传失败的文件退出上传队列,那么这个重新入队的上传失败的文件又会开始上传,然后又会失败,重新入队,重新上传...,进入了无止境的循环。 该设置是在v2.1.0中引入的。 http_success 默认值:[] 该数组可自定义触发success事件的HTTP状态值。200的状态值始终会触发success,并且只有200的状态会提供serverData。 当接受一个200以外的HTTP状态值时,服务端不需要返回内容。 【新】assume_success_timeout 默认值:0 assume_success_timeout设定SWFUpload将等待多少秒来检测服务器响应,超时将强制触发上传成功 (uploadSuccess)事件。这个属性是为了在 Flash Player的bug下正常工作。避免长时间的等待服务器响应,同时解决flash player在mac操作系统下无法使服务器返回内容的bug。 flash在最后一个uploadProgress事件被触发30秒后将忽略服务器的响应而强制触发上传成功事件。 如果assume_success_timeout被设置为0,将禁用这个特性。 SWFUpload将长时间等待 Flash Player来触发 uploadSuccess事件. file_types 默认值:*.* 设置文件选择对话框的文件类型过滤规则,该属性接收的是以分号分隔的文件类型扩展名,例如“ *.jpg;*.gif”,则只允许用户在文件选择对话框中可见并可选jpg和gif类型的文件。默认接收所有类型的文件。 提醒:该设置只是针对客户端浏览器的过滤,对服务端的文件处理中的文件类型过滤没有任何限制,如果你需要做严格的文件过滤,那么服务端同样需要程序检测。 file_types_description 默认值:All Files 设置文件选择对话框中显示给用户的文件描述。 file_size_limit 默认值:0 设置文件选择对话框的文件大小过滤规则,该属性可接收一个带单位的数值,可用的单位有B,KB,MB,GB。如果忽略了单位,那么默认使用KB。特殊值0表示文件大小无限制。 提醒:该设置只对客户端的浏览器有效,对服务端的文件处理没有任何限制,如果你需要做严格文件过滤,那么服务端同样需要程序处理。 file_upload_limit 默认值:0 设置SWFUpload实例允许上传的最多文件数量,同时也是设置对象中file_queue_limit属性的上限。一旦用户已经上传成功或者添加文件到队列达到上最大数量,那么就不能继续添加文件了。特殊值0表示允许上传的数量无限制。只有上传成功(上传触发了uploadSuccess事件)的文件才会在上传数量限制中记数。使用setStats方法可以修改成功上传的文件数量。 注意:该值不能跨页面使用,当页面刷新以后该值也被重置。严格的文件上传数量限制应该由服务端来检测、管理。 file_queue_limit 默认值:0 设置文件上传队列中等待文件的最大数量限制。当一个文件被成功上传,出错,或者被退出上传时,如果文件队列中文件数量还没有达到上限,那么可以继续添加新的文件入队,以顶替该文件在文件上传队列中的位置。如果允许上传的文件上限(file_upload_limit)或者剩余的允许文件上传数量小于文件队列上限(file_queue_limit),那么该值将采用这个更小的值。 flash_url 默认值:空字符串 设置绝对或者相对于此上传页面的完整URL,一旦SWFupload实例化以后,此设置不能再被修改。 提醒:测试发现使用setUploadURL方法是可以修改此设置的。 【新】flash9_url (v2.5.0新增) 支持 Flash Player 9的Flash 控件(swf) 绝对或相对的URL flash_width (v2.1.0已删除) Defines the width of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px. flash_height (v2.1.0已删除) Defines the height of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px. flash_color ( v2.2.0已删除) This setting sets the background color of the HTML element that contains the flash. The default value is '#FFFFFF'. Note: This setting may not be effective in "skinning" 1px flash element in all browsers. prevent_swf_caching 默认值:true (v2.2.0新增)该布尔值设置是否在Flash URL后添加一个随机值,用来防止浏览器缓存了该SWF影片。这是为了解决一些基于IE-engine的浏览器上的出现一个BUG。 提醒:SWFUpload是直接在flash_url后添加了一个swfuploadrnd的随机参数。如果你给定的flash_url中已经存在了GET类型的参数,那么就会出现两个问号连接符导致错误。 debug 默认值:false 该值是布尔类型,设置debug事件是否被触发。 注意:SWFUpload代码中是将此变量和字符串true做的恒等判断,因此它只认定true为DEBUG模式开启,如果设置为1,虽然JS认定是开启模式,并且在初始化完毕后会有生成Debug Console,但后续操作中FLASH不会输出调试信息。(因为我习惯用1和0代表布尔变量,因此一度疑惑为何Flash的debug信息无法输出。) button_placeholder_id 默认值:null (v2.2.0新增) 该必要参数指定了swfupload.swf将要替换的页面内的DOM元素的ID值。当对应的DOM元素被替换为SWF元素时,SWF的容器会被添加一个名称为"swfupload"的样式选择器供CSS自定义使用。 button_image_url 默认值:空字符串 (v2.2.0新增) V2.2.0版最大的改变就是引入了一个按钮到SWF中,利用该参数可以设置一个相对于该swf文件或者是绝对地址的图片(或者是SWF),作为按钮的UI展现。所有FLASH支持的图片类型都可以使用(gif,jpg,png,或者是一个SWF)。 该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片) button_width 默认值:1 (v2.2.0新增) 设置该SWF的宽度属性。 button_height 默认值:1 (v2.2.0新增)设置该SWF的高度属性(按钮图片高度的1/4) button_text 默认值:空字符串 (v2.2.0新增) 该属性设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合button_text_style参数来设置。关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation。 button_text_style 默认值:"color: #000000; font-size: 16pt;" (v2.2.0新增)此参数配合button_text参数,可以通过CSS样式来设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation button_text_top_padding 默认值:0 (v2.2.0新增) 设置Flash Button上文字距离顶部的距离,可以使用负值。 button_text_left_padding 默认值:0 (v2.2.0新增) 设置Flash Button上文字距离左侧的距离,可以使用负值。 button_action 默认值:SWFUpload.BUTTON_ACTION.SELECT_FILES(多文件上传) (v2.2.0新增) 设置Flash Button点击以后的动作。默认为SWFUpload.BUTTON_ACTION.SELECT_FILES,点击按钮将会打开多文件上传的对话框。如果设置为SWFUpload.BUTTON_ACTION.SELECT_FILE,则为单文件上传。如果设置为SWFUpload.BUTTON_ACTION.START_UPLOAD,则启动文件上传。 button_disabled 默认值:false (v2.2.0新增) 该布尔值设置Flash Button是否是禁用状态。当它处于禁用状态的时候,点击不会执行任何操作。 button_cursor 默认值:SWFUpload.CURSOR.ARROW(箭头光标) (v2.2.0新增) 此参数可以设置鼠标划过Flash Button时的光标状态。默认为SWFUpload.CURSOR.ARROW,如果设置为SWFUpload.CURSOR.HAND,则为手形 button_window_mode 默认值:SWFUpload.WINDOW_MODE.WINDOW (v2.2.0新增) 此参数可以设置浏览器具体以哪种模式显示该SWF影片。 custom_settings 默认值:空的Object对象 该属性接收一个Object类型数据,可用于安全地存储与SWFUpload实例关联的自定义信息,例如属性和方法,而不用担心跟SWFUpload内部的方法和属性冲突以及版本升级的兼容。 设置完毕以后,可以通过实例的customSettings属性来访问。 var swfu = new SWFUpload({ custom_settings : { "My Setting" : "This is my setting", myothersetting : "This is my other setting", integer_setting : 100, a_dom_setting : document.getElementById("some_element_id") } }); var my_setting = swfu.customSettings["My Setting"]); swfu.customSettings["My Setting"] = "This is my new setting"; swfu.customSetting.myothersetting = "another new value"; swfu.customSetting.integer_setting += 25; swfu.customSetting["a_dom_setting"].style.visibility = "hidden"; Event Handlers 默认值:null 剩下的设置定义的是一系列事件处理的回调函数,在SWFUpload的操作过程中相应的事件会被触发。如果你需要在这些回调中进行自定义操作,那么你应该在设置中定义对应的JavaScript函数。 【新】Support Object SWFUpload实例的support属性(其类型是一个对象)能确认SWFUpload的某些特性是否能被浏览器使用的某版本Flash Player支持 { load : bool, // 标示SWFupload是否能在当前版本的 Flash Player中载入 imageResize : bool, // 标示当前时候安装了Flash Player 10或更新版本的Flash Player,并且SWFUpload 是否支持客户端调节上传图片的大小。 } File Object File对象包含了一组可用的文件属性,很多处理事件都会传递一个File Object参数来访问该文件的相关属性。 { id : string, // SWFUpload控制的文件的id,通过指定该id可启动此文件的上传、退出上传等 index : number, // 文件在选定文件队列(包括出错、退出、排队的文件)中的索引,getFile可使用此索引 name : string, // 文件名,不包括文件的路径。 size : number, // 文件字节数 type : string, // 客户端操作系统设置的文件类型 creationdate : Date, // 文件的创建时间 modificationdate : Date, // 文件的最后修改时间 filestatus : number // 文件的当前状态,对应的状态代码可查看SWFUpload.FILE_STATUS } Stats Object 该对象提供了上传队列的状态信息,访问实例的getStats方法可获取此对象。 该对象包括下面属性: { in_progress : number // 值为1或0,1表示当前有文件正在上传,0表示当前没有文件正在上传 files_queued : number // 当前上传队列中存在的文件数量 successful_uploads : number // 已经上传成功(uploadSuccess触发)的文件数量 upload_errors : number // 已经上传失败的文件数量 (不包括退出上传的文件) upload_cancelled : number // 退出上传的文件数量 queue_errors : number // 入队失败(fileQueueError触发)的文件数量 所有这些属性的值都可以使用setStats方法来修改,除了in_progress 和 files_queued。 插件 SWFUpload Plug-ins SWFUpload v2.0版本之后引入了几个插件。它们帮助SWFUpload实现一些功能 大多数插件使用文档在js插件(plugin)文件夹里 SWFObject SWFObject插件使用 SWFObject library 来将 SWFUpload Flash组件(Component)插入页面 这个插件也提供文档结构载入完毕检测功能(Document Ready loading) 。(yukon:可能此功能像是jQery的$(document).ready())和flash版本检测功能。详细使用方法以文档的方式记录在此插件文件夹内。你最好不要使用 SWFObject的文档结构载入完毕检测功能( Document Ready loading)和其他库的相似功能混搭共同使用。只用其中的一个就可以了。 Flash Player 10: 由于 Flash Player 10要求使用一个按钮来触发影片的相关操作,如果这个按钮 (设置对象里的button_placeholder_id属性可标示它的id)被css之类的设置成hidden或者display:none,SWFUpload将加载失败 。 Cookies 为了解决Flash Cookie的 Bug,Cookies插件将自动获取你浏览器的cookie,并随上传发送。cookie将以 POST or GET 形式随上传url发送。 此插件以POST或GET方式发送cookie的键/值对.在服务器端它们不会以cookie形式来解析。某些自动检测cookie来确认session和身份授权的框架可能并不能获取此插件传递的值。 Queue Handling Queue Handling插件提供队列处理功能。比如整个队列的上传,整个队列的取消,入队后自动开始上传。 Speed speed插件扩展了'file' 对象的几个属性用以描述当前上传情况。此插件包含了当前速度( current speed),平均速度( average speed),已上传时间( elapsed time),预计还需的时间( remaining time)等值。 已知的问题 Known Issues Flash Player以及许多浏览器的bug 困扰着SWFUpload. 但是我们一直在努力。 linux上的取消 Cancelling in Linux 使用Flash 9 Player以及更早版本,在linux操作系统上执行取消上传功能将可能导致浏览器崩溃。不过新版本的Flash Player改善了这个问题。 linux上的上传进度 Upload Progress in Linux linux上的 Flash Player只在上传完毕后发出一次上传进度事件 (uploadProgress) ,而不是像windows里那样上传过程中不断发出。 这是由于一些linux分发版会在上传过程中锁定整个浏览器。 MAC上的上传进度 Upload Progress in OS X 我们收到了一些关于MAC操作系统上Flash Player不能触发uploadProgress事件的报告。详细的情况还有待了解,但请注意其潜在的问题 MIME Type 无论文件的实际MIME格式是什么,Flash Player以 mime格式application/octet-stream 上传所有的文件 文件最大可选择数 Maximum number of selected files Flash Player本身并没有限制可选择上传文件数的最大值,但是限制了总文件名的最大长度。这个字符串是这样组成的: "文件名"空格"文件名"...。能上传文件的个数取决于操作系统对文件名总长度的限制。如果用户选择了过多的文件,将会收到flash player的警告消息,并且显示在文件选择对话框里(yukon:我在xp一次上传了173个文件仍然没警告。。) 代理 Proxies Flash Player可能不能正常的使用代理。 它在处理代理验证时候有些问题,可能导致某些冲突。 有些杀毒软件使用一个本地客户端代理来接收上传的文件并进行扫描,(貌似是截获了上传文件,并把它写入一个代理服务器,扫描完毕后才会真正发送给目标服务器)这导致SWFUpload错误的以为整个文件被上传了,它将的发出大量的uploadProgress事件,直到100%完毕。当代理真正地上传给目标服务器的过程中,SWFUpload看起来像是被暂停了。 卡巴斯基杀毒软件:卡巴斯基 (和其他一些杀软)实现了一个用户端的代理,用来截获本地上传出的数据。SWFUpload不能检测这个代理系统的存在。这些代理服务器能非常快地接收上传的文件,扫描后再发送给目标文件。 apache安全模块 Apache mod_security Apache的安全模块 mod_security验证服务器收到的 POST消息. Flash Player实现了一个边缘化的方式 (an edge case 翻成取巧的方式?) (有个参数可以决定是否验证) POST 上传文件,服务器也实现了。 安全套接层协议层 SSL 我们收到一些报告称Flash Player 不能通过SSL来上传. 这个问题的具体情况还没被确认,但是看起来确实在ssl下上传并不可靠。特别是使用公匙-自签名证书(self-signed certificates)时会出现问题。 同样,由不被信任的签发机构CA发放的 SSL 证书不能被Flash接受。因为flash并没有提供一个这样的接收证书的方法。就像前面说的cookie bug,windows下的flash player只接收它所信任的名单中的CA发放的证书,而不管浏览器正在使用中的证书。 授权 Authentication HTTP 的授权验证机制不能被Flash Player良好的支持. 最新版本的 Flash Player会好一些,旧版本的可能会造成浏览器崩溃 。 过早终止连接 Prematurely terminated connections 过早终止连接 Prematurely ending the response (比如ASP.NET中的Response.end()方法) 会导致原本上传完毕,SWFUpload却报告上传失败。 文件的POST名 Filedata POST name in Linux 改变文件接收名 (默认 “Filedata” ,设置对象中file_post_name属性) 在Linux的 Flash Player中并不起作用. Cookie bug 在Windows 下非IE浏览器 (FireFox, Opera, Safari, etc) flash插件将会发送IE的cookie . 这破坏了很多服务器的session和授权验证机制 开发者必须自己手动解决传递 Session 和授权 cookie 信息的问题,还要自己手动修改在服务器上的session。如果他们想使用session。 不过SWFUpload软件包里提供了一个PHP 或 ASP.Net里解决此bug的例子代码。 ExternalInterface类的bug( ExternalInterface bugs) 当和浏览器/js交互时,Flash Player不能正确使用escape方法编码数据。SWFUpload为解决这个问题做了很大的努力。将来如果这个bug修复了,SWFUpload将会发送而外的escape编码数据. 超长服务器数据bug (Server Data length bugs) 过长的服务器响应数据在MAC或Linux系统中的Flash Player下会导致错误。数据可能会被裁短,改变或者某些重复。我们建议服务器发回的数据尽量的短小简明。 Avant Browser 一旦被缓存了,SWFUpload不能正确工作在Avant浏览器上. SWFUpload v2.2.0版本后添加了 prevent_swf_caching 设置来试图解决这个问题 . 文件选择对话框与页面改变 File Dialog & Page Changing 在出现文件选择对话框时离开或者刷新页面将会导致浏览器崩溃。(所有浏览器,所有操作系统下) 这种情况大多出现在你设定了一个超级链接<a>的“onclick”调用selectFile/selectFiles ,但又没有禁止它默认的转跳动作,点击这个超链的同时会跳到其他页面但同时又打开了文件选择对话框。。 (yukon:还有种可能:程序使页面强制刷新、重定向。比如HTML <meta>标签里的refresh, ASP.NET的Response.Redirect(),php的header()等) 服务器脚本执行时间过长 Long Running Upload Scripts Flash上传文件给web服务器后,上传接收程序就会被执行。 接收程序决定是否存储它们,创建缩略图,扫描病毒等等,如果接收程序30秒内不返回任何数据,Flash将断开链接,并返回一个IO错误。 如果你不想这样做,那么在处理的过程中,让服务器返回几个字符或者数据(如果你可以)。 比如PHP,虽然PHP脚本能在Flash断开后继续成功地完成操作,但断开之后Flash将不会接收到任何返回数据。 窗口模式 WMODE / BUTTON_WINDOW_MODE 在某些浏览器中,如果flash控件没有处于屏幕显示区域,设定的WMODE(由BUTTON_WINDOW_MODE设定)会阻止flash控件的载入。,只有当你拉动滚动条,让flash控件处于屏幕显示区域,才会加载并呈现。 (yukon:这样做是为了让页面尽快呈现,比如你打开一个存满图片的文件夹,查看方式调为缩略图,猛的下拉,会看见下面的图片文件逐渐显示出内容来) 这种特性可能会对SWFObject插件有不利的影响。SWFUpload事件可能不会被触发,按钮的背景图可能不会被载入除非控件呈现完毕。 某些操作系统中 (Linux ) 当 WMODE被设置为透明, Flash 打开的文件选择对话框会在浏览器窗口之后。 内存泄露 Memory Leaks 一些浏览器 (特别是 IE)不能在flash player用 ExternalInterface类与js交互后回收内存,(比如 SWFUpload). 生成过多的SWFUpload实例并且刷新几次页面将导致浏览器占用内存过多,进而导致浏览器崩溃或者其他一些系统错误。 在 v2.2.0版本的 SWFUpload中,我们实现了一些预防内存泄露的机制。但是还是推荐您在页面关闭时候调用destroy()方法。如果你在一个页面使用几百个SWFUpload实例,你必须小心测试以防内存泄露。 有关MAC操作系统的一些问题 Other Mac Issues 服务器返回的数据或 Mac系统上的 Flash Player 可能并不会触发 uploadSuccess 事件.我们添加了一个 assume_success_timeout 设置来帮助解决这个问题 。但是通常情况下,在接收成功后返回一个简短的字段是十分容易且可靠的。 有些用户反映在Mac系统下上传给含子域名的地址时有一些问题 有些用户反映重定向(HTTP 状态码 302) 不能被 Mac Flash Player很好的处理. Windows 下似乎没这个问题. 302 重定向经常用在一些授权模式和MVC设计框架中。 flash的开发文档指出 在早于 OS X 10.3版本的系统中, bytes loaded 一直会是 -1. SWFUpload把它改成了 0,但是 total bytes将不会被发送出来,进度永远到不了100% 。因此请设定在上传完毕,发出uploadSuccess 或 uploadComplete事件时更新UI让其显示100%。以此来让UI在各系统统一。 有些用户反映Mac Flash Player上传路径有空格字符时将出现问题. 请将它们替换成+或者%20 有些用户反映Mac Flash Player 会在 HTTP HOST头里加入端口号 (比如 http://www.example.com:80). 如果你检查这个参数,要小心对付这个问题。 文件如果只包含一个资源分支(resource fork),将会被Flash Player以0字节文件对待,不能上传(提示: Flash Player 10.1可能解决了这个问题) 如果认为此文对您有帮助,别忘了支持一下哦! 作者:齐飞 来源:http://youring2.cnblogs.com/ 声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。 转载:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html
文章
存储  ·  JavaScript  ·  前端开发  ·  开发者  ·  内存技术
2016-05-23
SWFUpload简介及中文参考手册(share)
简介: SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。   -----------------------------------------分割线--------------------------------------------   以下转自:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setUploadURL   SWFUpload 2.5.0版 官方说明文档 中文翻译版 Table of Contents 内容列表  SWFUpload SWFUpload 版本 2 概览 (Overview) 入门( Getting Started) js对象 (SWFUpload JavaScript Object) 构造器(Constructor) 全局变量和常量 (Globals and Constants) 【新增内容】instances movieCount 【新增内容】QUEUE_ERROR 【新增内容】UPLOAD_ERROR 【新增内容】FILE_STATUS 【新增】UPLOAD_TYPE 【新增内容】BUTTON_ACTION 【新增内容】CURSOR 【新增内容】BUTTON_WINDOW_MODE 【新增】RESIZE_ENCODING 【新增】onload 属性 Properties 【新增内容】customSettings movieName 方法 Methods addSetting 不推荐 (deprecated) getSetting 不推荐 (deprecated) retrieveSetting 已移除 (removed in v2.1.0) destroy 添加自2.1.0 (added in v2.1.0) displayDebugInfo selectFile selectFiles startUpload 【新增】startResizedUpload (added in v2.5.0) cancelUpload stopUpload 【新增】requeueUpload getStats setStats getFile 【新增】getQueueFile (added in v2.5.0) addPostParam removePostParam addFileParam removeFileParam setUploadURL setPostParams setFileTypes setFileSizeLimit setFileUploadLimit setFileQueueLimit setFilePostName setUseQueryString setDebugEnabled setButtonImageURL (added in v2.2.0) setButtonDimensions (added in v2.2.0) setButtonText (added in v2.2.0) setButtonTextStyle (added in v2.2.0) setButtonTextPadding (added in v2.2.0) setButtonDisabled (added in v2.2.0) setButtonAction (added in v2.2.0) setButtonCursor (added in v2.2.0) 【新增内容】事件 Events flashReady 【新增】swfUploadPreload 【新增】swfUploadLoadFailed 【新增】swfUploadLoaded 【新增】buttonAction fileDialogStart fileQueued 【新增内容】fileQueueError fileDialogComplete 【新增】uploadResizeStart uploadStart uploadProgress uploadError 【新增】uploadSuccess uploadComplete debug 实用功能对象 SWFUpload Utility Objects Settings Object Settings Description 【新】Support Object File Object Stats Object 相关插件 SWFUpload Plug-ins 【新增内容】已知问题 Known Issues SWFUpload SWFUpload 最初是Vinterwebb.se 开发的客户端文件上传工具。它联合javascript和flash,在浏览器中提供一个优于传统上传标签 <input type="file" /> 的功能(和良好的用户体验)。 SWFUpload 的主要特性: 文件浏览对话框中可以选择多个文件 AJAX风格的上传,不用重刷新 上传过程中的各种事件. 可以在客户端调节图片大小 它使用的类命名空间兼容各种js库(i.e., jQuery, Prototype, 等.). 支持 Flash 9 and Flash 10 (2.2.0版本后取消对flash 8的支持) SWFUpload 的设计理念与其他基于flash的上传工具不同。SWFUpload 给开发者尽可能多的UI控制能力. 开发者可以使用 XHTML, CSS, JavaScript 来使它更符合自己网站的样式风格. 它提供一组简单的js事件更新上传状态,开发者可以根据这些事件来在网页中显示文件上传进度 不过不幸的是 Flash Player 10 迫使我们不得不用一个按钮(点击后)才能触发文件选择对话框,但SWFUpload允许开发者用js来修改这个按钮的文字等外观。 SWFUpload v2 SWFUpload v2 包含了许多新的特性,增强的稳定性,解决了Flash Player 中的一些bug,提供了一些有用的插件(Plug-ins). 新特性包括: 可利用Flash Player 10 安全特性. 可以随上传来POST额外的数据 针对每一个文件上传发送POST数据 完善的各种事件组. 所有设置,参数,都可以灵活配置. 可获取服务器回传的数据. 可暂停正在上传的文件,而不是取消. 任意修改上传的次序. 可提供单一或多文件的选择对话框. 可限制上传文件队列长度,文件大小,上传文件个数 可更好地处理0字节文件. 每个文件都有上传确认事件. Overview HTML Upload 标准的HTML上传框只提供一个按钮和一个文本框让用户选择单个文件。然后通过表单提交。整个文件必须等到它上传完毕后才能确认并检查文件大小,文件扩展名,而且上传的过程中,回传反馈很少。这就造成了一些使用上的不便利。 但传统的HTML上传十分简单,单一步骤,所有浏览器都支持它。 SWFUpload SWFUpload 使用Flash 影片(flash movie) 来选择和上传文件。影片里有一个可定制的按钮来激活文件选择对话框。文件选择对话框允许用户选择单一的文件或者多个文件。 选择的的文件类型也是可以被限制的,开发人员可以限定用户只能选择指定的适当的文件,例如*.jgp;*.gif。 一旦选择并点击确定,每个文件都会被验证,并放入队列。当Flash上传文件的时候,由开发人员预定义的Javascript事件会被触发以便来更新页面中的UI显示,并且还能实时提供上传状态和错误信息。 文件的上传是独立于页面和表单的。每个文件单独的上传到处理页面,这就使服务器可以简单轻松地处理文件。flash提供的上传服务使得整个页面不必提交或者刷新。这有点像AJAX程序。页面中的Form表单数据会和FLASH控制的文件上传单独处理。 入门 Getting Started SWFUpload 不是拖放式的上传控件。因此需要一些dom和js的知识。几个demo将会展示swfUpload的能力以及如何使用它们完成任务。 SWFUpload 包含4部分: 初始化和设置 (JavaScript) JavaScript 库: SWFUpload.js Flash控件: swfupload.swf 和 swfupload_fp9.swf 事件处理机制 (JavaScript) 许多使用 SWFUpload 的问题都出在设置上。错误的事件处理, Flash/浏览器的Bug,或者服务器配置。 初始化和设置 Initialization and Settings SWFUpload 必须在页面上初始化.它通常在js的window.onload事件里完成. SWFUpload 的构造函数需要获取一个Object类型的对象(js). 这个对象的数据直接的传递给构造函数. 初始化的SWFUpload对象的引用(reference)应该保存好,(yukon:即用变量存储起来.如例子中的swfu)因为在启动文件上传以及控制其他特性的时候也需要这个引用。 例子:初始化SWFUpload时直接传入一个匿名对象来配置参数 var swfu; window.onload = function () { swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", //处理上传文件的地址 flash_url : "http://www.swfupload.org/swfupload.swf", //核心功能swf的地址 flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" //文件大小限制 }); }; 例子: 也可以在初始化SWFUpload时使用一个对象变量(settings_object)传入配置参数 var swfu; window.onload = function () { var settings_object = { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" }; swfu = new SWFUpload(settings_object); }; js库 JavaScript library 如果想使用swfupload, js库文件(swfupload.js) 必须被引入到使用的页面中. 一旦 SWFUpload 对象被创建,就可以访问许多功能函数。开发者可以以此来控制SWFUpload。 例: 如何引入swfupload.js库 <script type="text/javascript" src="http://www.swfupload.org/swfupload.js"></script> 例: 按需初始化 SWFUpload. var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", button_placeholder_id : "spanSWFUploadButton" //yukon:这里有个新参数,将会使用js在id为“spanSWFUploadButton”的标签容器如span,div中创建一个“选择”按钮 }); 【新增内容】flash控件 Flash Control SWFUpload js库能动态的加载 Flash 控件 (swfupload.swf 或 swfupload_fp9.swf). Flash控件的文件地址在初始化的时候就必须在SWFUpload设置对象中定义。 Flash控件实际上是个Flash小影片,它可以控制文件的选择,验证和上传。 它在页面中展现给用户的是一个UI可自定制的按钮,并且能检测Flash Player的版本(9,10)自动加载适合用户播放器版本的flash控件 使用 flash_url 和 flash9_url 可以设置swfupload.swf 或者 swfupload_fp9.swf 的路径。(yukon:前面几个例子已经有写了) 事件处理 The Event Handlers 开发者必须创建一组js函数来处理SWFUpload的事件. 当各种重要的事件发生的时候,这些函数会被触发执行。 通过处理SWFUpload的事件,开发人员能够提供关于上传进度、出错信息以及上传完成等的信息反馈。注意:开发人员不要重写了存储在SWFUpload.prototype的函数。 例: SWFUpload事件处理和初始化. // 上传开始(uploadStart)事件处理函数. 设置对象的“upload_start_handler”属性的值应是此函数的名字 var myCustomUploadStartEventHandler = function (file) { var continue_with_upload; if (file.name === "the sky is blue") { continue_with_upload = true; } else { continue_with_upload = false; } return continue_with_upload; }; // 上传成功( uploadSuccess )事件处理函数. 设置对象的“upload_success_handler”属性的值应是此函数的名字 var myCustomUploadSuccessEventHandler = function (file, server_data, receivedResponse) { alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data); }; // Create the SWFUpload Object var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "200 MB", upload_start_handler : myCustomUploadStartEventHandler, upload_success_handler : myCustomUploadSuccessEventHandler swfupload js 对象 SWFUpload JavaScript Object 构造函数 Constructor SWFUpload(settings object) //SWFUpload(设置对象) 返回: 一个SWFUpload 实例 var swfupload_instance = new SWFUpload(settings_object); 全局变量和常量 Globals and Constants SWFUpload定义了一些全局变量和常量,这对SWFUpload的高级应用和处理错误都是很有用的,它们都是只读的。 【新增内容】SWFUpload.instances SWFUpload.instances 是存贮着一个页面中所有SWFUpload实例引用的数组对象。Flash Player依靠这个对象数组来调用正确的事件处理函数。SWFUpload.instances对象数组的索引(SWFUpload.instances[index])是属性movieName。 SWFUpload.movieCount SWFUpload.movieCount 是一个全局变量,记录页面中已创建了多少个SWFUpload对象实例,并用来确保每个flash影片均被赋予一个唯一的movieName. 【新增内容】SWFUpload.QUEUE_ERROR SWFUpload.QUEUE_ERROR 是一个简单的js对象,包含了队列错误码(Queue Error code)的常量。用来决定当文件队列错误(fileQueueError)发生时,将发送什么错误码。 SWFUpload.QUEUE_ERROR = { QUEUE_LIMIT_EXCEEDED : -100, FILE_EXCEEDS_SIZE_LIMIT : -110, ZERO_BYTE_FILE : -120, INVALID_FILETYPE : -130 }; QUEUE_LIMIT_EXCEEDED - 指出用户入队过多,超过队列最大长度。不过一旦在队列中的文件被上传或者删除,用户仍然可以添加文件到文件上传等待队列中。 FILE_EXCEEDS_SIZE_LIMIT -指出超过了所限制的文件大小(file_size_limit). ZERO_BYTE_FILE - 指出选择的文件时0字节的。Flash Player不能处理空文件。上传Windows快捷方式图标也会触发这个错误。 INVALID_FILETYPE - 指出选择的文件扩展名与允许不符。用户手工输入扩展名不符的文件名,而不是用鼠标点击选择文件的时候就有可能触发这个错误。 【新增内容】SWFUpload.UPLOAD_ERROR SWFUpload.UPLOAD_ERROR 也是一个简单的js数组对象,它包含了上传错误码常量(Upload Error code constants).用来决定当上传错误(uploadError)事件发生时发送什么错误码. SWFUpload.UPLOAD_ERROR = { HTTP_ERROR : -200, MISSING_UPLOAD_URL : -210, IO_ERROR : -220, SECURITY_ERROR : -230, UPLOAD_LIMIT_EXCEEDED : -240, UPLOAD_FAILED : -250, SPECIFIED_FILE_ID_NOT_FOUND : -260, FILE_VALIDATION_FAILED : -270, FILE_CANCELLED : -280, UPLOAD_STOPPED : -290 }; HTTP_ERROR - 尝试上传给服务器,但服务器没有返回200状态码(200表示无异常) MISSING_UPLOAD_URL - 没有设置上传地址(upload_url). IO_ERROR - 当读取和发送文件时出现了一些错误。通常发生在服务器非预期地关闭了终端连接的时候。 SECURITY_ERROR - 安全错误,上传违反了安全约束。比较少见。 UPLOAD_LIMIT_EXCEEDED - 用户尝试上传比预设数多的文件 UPLOAD_FAILED - 尝试初始化上传时出现了错误。比较少见。 SPECIFIED_FILE_ID_NOT_FOUND - 一个文件开始上传,但没有找到这个文件。(yukon:文件选择完并添加到队列后,用户又在磁盘上改了文件名或者删除了文件等) FILE_VALIDATION_FAILED - 当上传开始时传回了某错误 FILE_CANCELLED - 取消了上传(调用了cancelUpload函数) UPLOAD_STOPPED - 暂停了上传(调用了stopUpload函数) RESIZE_ERROR - 当调整图像大小时出现了某错误 【新增内容】SWFUpload.FILE_STATUS SWFUpload.FILE_STATUS 是一个js数组对象,包含了文件状态码常量( File Status code constants). 用来检测File对象的属性file status SWFUpload.FILE_STATUS = { QUEUED : -1, IN_PROGRESS : -2, ERROR : -3, SUCCESS : -4, CANCELLED : -5 }; QUEUED - 指示此文件正在等待上传队列中 IN_PROGRESS - 指示此文件现在正在上传中 ERROR - 指示此文件引发了一个队列或上传错误 COMPLETE - 指示此文件已成功传输给服务器 CANCELLED - 指示此文件被取消上传(调用了cancelUpload函数). 【新增】SWFUpload.UPLOAD_TYPE[作用:确定上传类型] SWFUpload.UPLOAD_TYPE 是一个js数组对象,包含了上传类型常量(Upload Type constants). 用于检测File对象的上传类型属性( upload type property) NORMAL - 普通的SWFUpload 上传 RESIZED - 被调整大小的图片上传,数据以HTTP的post方式发送。 【新增内容】SWFUpload.BUTTON_ACTION[作用:决定点击按钮后执行的动作] SWFUpload.BUTTON_ACTION 是一个js数组对象,包含了按钮动作码常量(button action code constants). 用于按钮动作(button_action)的值设置,从而可设置flash影片中的那个交互式按钮对各种鼠标动作的的相关响应. SWFUpload.BUTTON_ACTION = { SELECT_FILE : -100, SELECT_FILES : -110, START_UPLOAD : -120 } SELECT_FILE - 点击按钮时,打开单一文件选择对话框。(js设定的)鼠标点击事件不会被触发 SELECT_FILES - 点击按钮时,打开多文件选择对话框。(js设定的)鼠标点击事件不会被触发 START_UPLOAD - 点击按钮时,在上传队列的第一个文件将被上传。(js设定的)鼠标点击事件不会被触发 NONE - 这种情况下,(js设定的)鼠标点击事件会被触发 JAVASCRIPT - 和NONE相同。这个值已被弃用 【新增内容】SWFUpload.CURSOR[作用:改变鼠标样式] SWFUpload.CURSOR 是一个js数组对象,包含了按钮光标常量。用于按钮光标 (button_cursor)的值的设置,从而改变鼠标指向按钮时,鼠标的样式。 SWFUpload.CURSOR = { ARROW : -1, HAND : -2 } ARROW - 光标呈现成箭头指针 HAND - 光标呈现成手型 【新增内容】SWFUpload.WINDOW_MODE[作用:影片的显示模式] SWFUpload.WINDOW_MODE 是一个js数组对象,包含了按钮影片窗口模式参数常量(button movie wmode parameter constants). 用于告诉浏览器如何呈现flash影片。 有些 WINDOW_MODE/WMODE 设置会导致一些浏览器问题 具体请看 Known Issues. SWFUpload.WINDOW_MODE = { WINDOW : "window", TRANSPARENT : "transparent", OPAQUE : "opaque" }; WINDOW 是默认模式. flash影片绘制在页面的最上层. OPAQUE 允许页面其他元素遮盖这个按钮影片。 TRANSPARENT 透明。按钮的背景呈透明状,允许html元素在它下面显示 【新增】SWFUpload.RESIZE_ENCODING[作用:指出图片编码格式] SWFUpload.RESIZE_ENCODING 是一个js数组对象,包含了大小调整类型常量( resize encoding type constants).用以指出被大小调整的图片的编码格式 JPEG - JPEG编码格式 PNG - PNG 编码格式 【新增】SWFUpload.onload [作用:定义页面加载完毕后的操作函数] onload 是一个可以通过swfobject的addDOMLoadEvent方法执行的函数. 你通过这个方法,在页面加载完毕之后可以执行你的脚本程序。不过你应该确定你没有使用其他类似的方法 (比如 jQuery框架的 “Ready” 或者 Prototype库中的 dom:loaded). SWFUpload.onload = function () { new SWFUpload(settingsObject); } 上面一个例子将在最早的浏览器加载事件中初始化SWFUpload。大多DOM准备完毕事件(DOMReady event)的执行时紧随window.onload事件之后。 属性 Properties 请遵循下面的属性列表描述来使用这些属性。如果把错误的使用一个只读或只写属性属性,将会导致SWFUpload错误. 【新增内容】customSettings (可读写)[作用:开发人员自定义设置] “自定义设置”属性( customSettings)是一个js空对象。用以存储与一个SWFUpload实例有关的数据。 它的内容可以使用设置对象中的custom_settings属性来初始化。 Example: // 初始化 SWFUpload 对象时使用一些自定义设置 var swfu = new SWFUpload({ custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } }); swfu.customSettings.custom_setting_1 = "custom_setting_value_1"; // 改变一个已有的自定义设置 swfu.customSettings.myNewCustomSetting = "new custom setting value"; // 添加一个新的自定义设置 // 用一个全新的对象来重写自定义设置 swfu.customSettings = { custom_setting_A : "custom_setting_value_A", custom_setting_B : "custom_setting_value_B" }; 存储在自定义设置对象(customSettings object)的值可以轻松地被事件处理函数访问:(yukon:这个属性是利用js的动态特性,给开发者高度的开发自由) function uploadSuccess(file, serverData, receivedResponse) { if (this.customSettings.custom_setting_A === true) { alert("Checked the custom setting!"); } } movieName (只读)[作用:存储一个swfload实例的唯一标示] 包含了某SWFUpload实例的唯一标示名. 这个值可传递给Flash,以帮助as-js之间的交互。用于索引存储在SWFUpload.instances数组的实例. 你不应该也不能改变它。 方法 Methods 下面的方法用于操作SWFUpload. 有些方法可以与DOM元素的单击事件绑定,其它的方法供SWFUpload内部处理事件中调用。 object addSetting(setting_name, value, default_value) 不赞成使用 The addSetting function sets a setting value. If the value is undefined then the default_value is used. The function is used by SWFUpload addSetting returns the value that was stored in the setting. object getSetting(setting_name) 不赞成使用 The getSetting function retrieves the value of a setting. If the setting is not found an empty string is returned. object retrieveSetting(setting_value, default_value) 在 v2.1.0 中移除 The retrieveSetting function is similar to the addSetting function except it does not modify the internal settings object. retrieveSetting returns the setting_value unless it is undefined in which case it returns the default_value This is a utility function. bool destroy() [作用:销毁一个SWFUpload实例] 自 v2.1.0 添加 移除一个SWF的DOM元素,并且销毁SWFUpload的内部引用. 用以彻底删除页面中的一个SWFUpload实例. 防止在ie中的内存泄露问题 如果成功移除,返回true,如果出现任何导致SWFUpload实例的状态出现错误的问题,将返回false(Returns false if any error occurs leaving the SWFUpload instance in an inconsistent state). void displayDebugInfo()[作用:输出调试信息] 在debug事件中displayDebugInfo()输出SWFUpload 设置. 如果在初始化时候debug setting被设置为true,这个函数会被自动的调用。 void selectFile() 不推荐. 不兼容 Flash Player 10. selectFile causes the Flash Control to display a File Selection Dialog window. A single file may be selected from the Dialog window. Calling selectFile begins the File Event Chain. void selectFiles() 不推荐. 不兼容Flash Player 10. selectFiles causes the Flash Control to display a File Selection Dialog window. A multiple files may be selected from the Dialog window. Calling selectFiles begins the File Event Chain. void startUpload(file_id)【作用:开始上传文件】 startUpload接收file_id来上传文件。如果不传给它file_id值,那么将默认上传待上传队列的第一个文件 调用startUpload会触发上传事件链 (the Upload Event Chain). 【新增】void startResizedUpload(file_id, width, height, encoding, quality, allowEnlarging)【作用:附带调整图片大小功能的上传】 startResizedUpload 接收file_id参数来上传文件. SWFUpload尝试调整文件长宽等设置(如果是flash支持的图片格式) .如果图片格式不被支持,会引发一个上传错误(uploadError). width和height参数用来设定图片最大宽和高。但调整过程中会保持图片宽高比。 encoding的值必须是是存在SWFUpload.RESIZE_ENCODING中的常量. quality 只能用于调节JPEG格式图像的品质。接收范围是0-100。如果在这个范围外,会强制成0或100. allowEnlarging参数定义了SWFUpload是否允许将原图像扩大。(默认为true)如果原图像的长宽小于前面所说的width和height。如果设置其值为false的话,图像仍然会被编码,但不会将它扩大。 调用startResizedUpload方法会引发一个普通的上传事件链锁 . 但是Flash Player不会定时地提供 uploadProgress 事件. SWFUpload只会发送 模拟 0% 和 100% 的上传过程事件(uploadProgress events). 被调节大小的图片以POST方式传递数据,(而不是像FILE那样) 因为Flash Player 10引入了安全特性 .附带调整图片大小功能的上传的php处理页面和普通的上传php处理页面有所不同: $resizedImageData = $_POST["Filedata"]; // 服务器端以$_POST方式接收数据而不是 $_FILE $fileHandle = fopen("image.jpg", "w"); //以file系列操作函数来存储图片 fwrite($fileHandle, $resizedImageData); fclose($fileHandle); void cancelUpload(file_id, trigger_error_event)【作用:移除一个上传】 cancelUpload接收file_id 参数来移除一个文件的上传.这个文件会被移除出待上传队列 . 如果不给它file_id,默认上传队列中的第一个文件将会被取消. 可选参数trigger_error_event如果被设置为false,uploadError事件将不会被触发. void stopUpload()【作用:停止上传文件】 stopUpload停止当前正在上传的文件,并且把它还原到待上传队列中。(yukon:和移除不同,就是取消这个文件的上传,但不会移除出上传队列) 调用stopUpload时,如果有正在上传的文件,uploadError事件会被触发;如果此时没有正在上传文件,那么不会发生任何操作,也不会触发任何事件。 【新增】bool requeueUpload(file_id or index)【作用:重新入队】 requeueUpload将之前曾经入队的文件重新加入等待上传队列 如果文件没有找到,或者正在被上传,会返回false 注意:被重新入队的文件不会被再一次检查文件大小,队列大小,总上传个数或其他限制,只会把文件添加到队列中,如果这个文件引用仍然存在 object getStats()【作用:返回当前状态对象】 返回状态对象(stats object). void setStats(stats_object)【作用:设置或修改状态对象】 设置或修改状态对象( Stats Object) . 如果你在上传完毕后改变上传成功数,上传失败数,你可以使用此方法 object getFile(file_id|index)【作用:在队列中获取特定文件对象】 getFile通过接收file id (某个文件对象的id) 或者 file index (某个文件对象的index属性),返回在队列中的文件对象. 当给getFile传递一个file_id,只有在队列中的文件才可能被获取,如果找不到文件,将返回null 当给getFile传递一个index,所有尝试入队的(包括哪些入队时产生了错误的文件)将可能被获取。如果index索引超出范围,会返回null 【新增】object getQueueFile(file_id|index)【作用:返回等待上传队列中特定的文件对象】 getQueueFile 用来从等待上传队列中返回单个文件对象。 具体是通过接收file id (某个文件对象的id) 或者 file index (某个文件对象的index属性),返回在队列中的文件对象.index 索引从0开始计算. 当给 getQueueFile传递一个file_id,只有在等待上传队列中的文件才可能被获取,如果找不到文件,将返回null 当给 getQueueFile传递一个index,只有在等待上传队列中的文件才可以被获取 例如: getQueueFile(0) 返回一个在等待上传队列首部的文件对象. 如果调用了startUpload函数,它将在当前上传文件上传完毕后被上传。 (yukon:上面2个方法的区别可能是:getFile是获取文件队列中的文件。包括已上传的,错误的,等待上传的队列。而getQueueFile只获取等待上传队列中的文件) void addPostParam(name, value)【作用:添加一个键/值对】 addPostParam 添加一个键/值对,在每个的文件被上传时以POST方式捎带发送 它对应着post_params设置中的相同键值对。如果post_params中已经存在该值,那么实际上会被覆盖。 void removePostParam(name)【作用:移除一个键/值对】 removePostParam 移除一个键/值对,这个键值对之前将在每个的文件被上传时以POST方式捎带发送 它对应着post_params设置中的相同键值对。如果post_params中已经存在该值,那么实际上会被移除。 bool addFileParam(file_id, name, value) 为指定file_id的某一文件对象添加一个POST键/值对,如果添加的name属性已经存在,那么原值会被覆盖。 如果需要给所有文件对象添加POST值,那么可以使用设置中的post_params属性。 bool removeFileParam(file_id, name) 删除由addFileParam添加的POST值对. 如果POST设置中没有此属性,那么返回false void setUploadURL(url) 动态修改设置中的upload_url属性。 void setPostParams(param_object) 动态修改post_params,以前的属性全部被覆盖。param_object必须是一个JavaScript的基本对象,所有属性和值都必须是字符串类型。 void setFileTypes(types, description) 动态修改设置中的file_types 和 file_types_description,两个参数都是必须的 void setFileSizeLimit(file_size_limit) 动态修改设置中的file_size_limit,此修改针对之后的文件大小过滤有效。file_size_limit参数接收一个单位,有效的单位有B、KB、MB、GB,默认单位是KB。 例如: 2147483648 B, 2097152, 2097152KB, 2048 MB, 2 GB void setFileUploadLimit(file_upload_limit) 动态修改设置中的file_upload_limit,特殊值0表示无限制。 提醒:这里限制的是一个SWFUpload实例控制上传成功的文件总数。 void setFileQueueLimit(file_queue_limit) 动态修改设置中的file_queue_limit,特殊值0表示无限制。 提醒:这里限制的是文件上传队列中(入队检测通过的文件会添加到上传队列等待上传)允许排队的文件总数。. void setFilePostName(file_post_name) 动态修改设置中的file_post_name,注意在Linux环境下,FlashPlayer是忽略此设置的。 void setUseQueryString(use_query_string) 动态修改设置中的use_query_string,设置为true的时候,SWFUpload以GET形式发送数据,如果为false,那么就以POST发送数据。 void setDebugEnabled(debug_enabled) 动态启动/禁止 debug输出,debug_enabled参数是一个布尔值。 void setButtonImageURL(url) 动态修改按钮的图片。url参数是相对于该swf文件或者是绝对地址的图片(例如:以 /开始的相对路径或者是绝对路径:http://www.swfupload.org/buttonImage.png)。所有FLASH支持的图片类型都可以使用(gif,jpg,png)。 该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片) void setButtonDimensions(width, height) 动态修改SWF影片的尺寸以适应Button的图片大小。值必须是纯数值不能包括长度单位.高必须是整个图片按钮高的1/4,以此来保证显示的正确 void setButtonText(text) 动态设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合setButtonTextStyle方法来设置。如果文字过大,将会被隐藏超过的部分关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation。 void setButtonTextStyle(css_style_text) 配合setButtonText方法,可以通过CSS样式来动态设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation void setButtonTextPadding(left, top) 设置flash按钮文本的左边和右边的padding。值可以为负数 void setButtonDisabled(isDisabled) 当设置为 'true'是会禁用flash按钮,任何关于按钮的动作与操作都会被忽略。 void setButtonAction(buttonAction) 定义鼠标被点击后执行的动作。BUTTON_ACTION常量枚举中存储着这个方法可用的值 void setButtonCursor(buttonCursor) 设置鼠标指针指向按钮时的样式。CURSOR常量枚举中存储着这个方法可用的值 【新增内容】事件 Events SWFUpload在操作过程中会触发一系列事件,开发者可以利用这些回调的处理事件来控制UI,控制操作或者报告错误。 所有的事件都是在SWFUpload实例的上下文中调用的,因此在这些回调的事件中使用this能够直接访问到该触发该事件的实例对象。 所有事件应该在实例初始化时setting参数中预设完成。 【新:】 上传一个文件时,事件按照下面的顺序被调用(上传事件链): 附加调整图片大小功能的上传开始 uploadResizeStart 普通上传开始 uploadStart 正在上传中 uploadProgress (在上传文件的过程中重复的被调用着) 上传错误 uploadError (当出现某些错误时被调用, 上传文件将被取消或停止) 上传成功 uploadSuccess (成功的上传了文件,服务器接受到了可用数据) 完成了上传 uploadComplete (上传完成,SWFUpload 准备开始上传下一个) flashReady() 该事件函数是内部事件,因此不能被重写。加载的FLASH控件完成所有初始化操作时,将触发此事件来通知SWFUpload它可以接受各种命令了。 提醒:对应设置中的自定义事件swfupload_loaded_handler 【新增】 swfUploadPreload() swfUploadPreload 事件是 SWFUpload 已确认各项可用特性之后,Flash Movie加载完毕之前的这段时间内触发的事件.此事件的处理函数如果返回false,将停止加载swfupload。通常用在处理浏览器不支持某重要特性参数的情况 。 在设置对象的 swfupload_preload_handler 属性中可设置此事件处理函数 【新】swfUploadLoadFailed() 当页面不能正常加载flash影片的时候。通常是因为没有安装Flash Player或者它的版本低于 9.0.28 在设置对象的 swfupload_load_failed_handler 属性中可设置此事件处理函数 【新】swfUploadLoaded() swfUploadLoaded 事件在flash加载并准备完毕后被触发. 它是可设定的。 swfUploadLoaded 事件将会通知你flash加载完毕,能安全的执行各项方法了。 在设置对象的 swfupload_loaded_handler 属性中可设置此事件处理函数 【新】mouseClick() mouseClick事件在按钮被单击,(同时button_action setting的值为SWFUpload.BUTTON_ACTION.NONE,或者是flash按钮被设置为disable时)才被触发。 如果button_action settings的值为其他,或者flash按钮可用,这个事件都不被触发 在设置对象的 mouse_click_handler 属性中可设置此事件处理函数 【新】mouseOver() mouseOver事件将在鼠标在flash影片的任何部分移动时被触发 在设置对象的 mouse_over_handler 属性中可设置此事件处理函数 【新】mouseOut() mouseOut 事件再鼠标离开flash影片时被触发 在设置对象的 mouse_out_handler 属性中可设置此事件处理函数 fileDialogStart() 此事件在selectFile或者selectFiles调用后,文件选择对话框显示之前触发。只能同时存在一个文件对话框。但是,这个事件处理函数将不被执行,直到文件选择对话框被关闭 在设置对象的 file_dialog_start_handler 属性中可设置此事件处理函数 fileQueued(file object) 当选择好文件,文件选择对话框关闭消失时,如果选择的文件成功加入待上传队列,那么针对每个成功加入的文件都会触发一次该事件(N个文件成功加入队列,就触发N次此事件)。 对应设置中的自定义事件file_queued_handler 【新增内容】fileQueueError(file object, error code, message)   当选择文件对话框关闭时,如果选择的文件加入到上传队列中失败,那么针对每个出错的文件都会触发一次该事件(此事件和fileQueued事件是二选一触发,文件添加到队列只有两种可能,成功和失败)。 文件入队出错的原因可能有:1.超过了上传大小限制,2.文件为零字节,3.超过文件队列数量限制,4.允许外的无效文件类型。 (yukon:经测试,message所含的内容如下: 1.超过了上传大小限制:message=File size exceeds allowed limit. 2.文件为零字节:message=File is zero bytes and cannot be uploaded. 3.超过文件队列数量限制:message=int(指你设定的队列大小限制数) 4.允许外的无效文件类型:message=File is not an allowed file type. 如果你要改这些消息,请在开源包里的swfupload.as里改,然后重新编译成swfupload.swf。 ) 具体的出错原因可由error code参数来获取,error code的类型可以查看SWFUpload.QUEUE_ERROR中的定义。 提醒:对应设置中的自定义事件file_queue_error_handler 注意:如果选择入队的文件数量超出了设置中的数量限制,那么所有文件都不入队,此事件只触发一次。如果没有超出数目限制,那么会对每个文件进行文件类型和大小的检测,对于不通过的文件触发此事件,通过的文件成功入队。 fileDialogComplete(number of files selected, number of files queued, total number of files in the queued) 当选择文件对话框关闭,并且所有选择文件已经处理完成(加入上传队列成功或者失败)时,此事件被触发,number of files selected是选择的文件数目,number of files queued是此次选择的文件中成功加入队列的文件数目。 提醒:对应设置中的自定义事件file_dialog_complete_handler 注意:如果你希望文件在选择以后自动上传,那么在这个事件中调用this.startUpload() 是一个不错的选择。 如果需要更严格的判断,在调用上传之前,可以对入队文件的个数做一个判断,如果大于0,那么可以开始上传。 【新】uploadResizeStart(file object, width, height, encoding, quality) uploadResizeStart事件处理函数在一个图片开始调整大小时被调用。调整期间不提供progress事件和处理方法。 但是重新编码图片会花费一些时间 。如果这期间出现错误的话 uploadError事件将会被触发 当调整完成SWFUpload 继续触发 uploadStart事件,并且开始和普通上传一样的事件链. uploadStart(file object) 在文件开始向服务端上传之前触发uploadStart事件,这个事件处理函数可以完成上传前的最后验证以及其他你需要的操作,例如添加、修改、删除post数据等。 在完成最后的操作以后,如果函数返回false,那么这个上传不会被启动,如果返回true或者无返回,那么将正式启动上传。 提醒:对应设置中的自定义事件upload_start_handler uploadProgress(file object, bytes complete, total bytes) uploadProgress事件由flash控件定时触发,提供三个参数分别访问上传文件对象、已上传的字节数,总共的字节数。因此可以在这个事件中来定时更新页面中的UI元素,以达到及时显示上传进度的效果。 注意: 在Linux下,Flash Player只在整个文件上传完毕以后才触发一次该事件,官方指出这是Linux Flash Player的一个bug,目前SWFpload库无法解决。 提醒:对应设置中的自定义事件upload_progress_handler uploadError(file object, error code, message) 无论什么时候,只要上传被终止或者没有成功完成,那么uploadError事件都将被触发。error code参数表示了当前错误的类型,更具体的错误类型可以参见SWFUpload.UPLOAD_ERROR中的定义。Message参数表示的是错误的描述。File参数表示的是上传失败的文件对象。 例如,我们请求一个服务端的一个不存在的文件处理页面,那么error code会是-200,message会是404。 停止、退出、uploadStart返回false、HTTP错误、IO错误、文件上传数目超过限制等,都将触发该事件,Upload error will not fire for files that are cancelled but still waiting in the queue。(对于官方的这句话我还存在疑问,文件退出以后怎么还会保留在文件上传队列中保留呢?) 提醒:对应设置中的自定义事件upload_error_handler 注意:此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。 【新增内容】uploadSuccess(file object, server data, received response) 当文件上传的处理已经完成(这里的完成只是指向目标处理程序发送完了Files信息,只管发,不管是否成功接收),并且服务端返回了200的HTTP状态时,触发uploadSuccess事件。server data指的是服务器发出的一些数据(比如你自己echo出的)而received response是服务器自己发出的HTTP状态码 由于一些Flash Player的bug,HTTP状态码可能不会被获取到,从而导致uploadSuccess事件不能被触发。由于这个原因,2.50版在设置对象中增加了一个新属性assume_success_timeout 用来设置是否超过了等待接收HTTP状态码的最长时间,超过即触发 uploadSuccess。在这种情况下,(received response)参数会无效。 设置对象中的 http_success 允许设置在HTTP状态码为非200的其他值时也触发uploadSuccess事件。In this case no server data is available from the Flash Player. 在 提醒:对应设置中的自定义事件upload_success_handler 注意: server data是服务端处理程序返回的数据。 此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。 在window平台下,那么服务端的处理程序在处理完文件存储以后,必须返回一个非空值,否则此事件不会被触发,随后的uploadComplete事件也无法执行。 uploadComplete(file object) 当上传队列中的一个文件完成了一个上传周期,无论是成功(uoloadSuccess触发)还是失败(uploadError触发),uploadComplete事件都会被触发,这也标志着一个文件的上传完成,可以进行下一个文件的上传了。 如果要下个文件自动上传,那么在这个时候调用this.startUpload()来启动下一个文件的上传是不错的选择。不过要小心使用。参见注意 提醒:对应设置中的自定义事件upload_complete_handler 注意:当在进行多文件上传的时候,中途用cancelUpload取消了正在上传的文件,或者用stopUpload停止了正在上传的文件,那么在uploadComplete中就要很小心的使用this. startUpload(),因为在上述情况下,uploadError和uploadComplete会顺序执行,因此虽然停止了当前文件的上传,但会立即进行下一个文件的上传,你可能会觉得这很奇怪,但事实上程序并没有错。如果你希望终止整个队列的自动上传,那么你需要做额外的程序处理了。 debug(message) 如果debug setting设置为true,那么页面底部会自动添加一个textArea, 如果此debug事件没有被重写,那么SWFUpload库和Flash都会调用此事件来在页面底部的输出框中添加debug信息供调试使用。 提醒:对应设置中的自定义事件debug_handler 功能对象 SWFUpload Utility Objects 设置对象 Settings object 它是一个js的Object类型的变量,为SWFUpload的实例初始化提供配置。 其中的每一个配置属性都只能出现一次。 很多属性都是可选的,如果可选属性没有被配置,那么会使用SWFUpload库中默认指定的合适的值,具体可查看setting的详细介绍。 例如:(setting可以配置的所有属性) Example: { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_post_name : "Filedata", post_params : { "post_param_name_1" : "post_param_value_1", "post_param_name_2" : "post_param_value_2", "post_param_name_n" : "post_param_value_n" }, use_query_string : false, requeue_on_error : false, http_success : [201, 202], assume_success_timeout : 0, file_types : "*.jpg;*.gif", file_types_description: "Web Image Files", file_size_limit : "1024", file_upload_limit : 10, file_queue_limit : 2, debug : false, prevent_swf_caching : false, preserve_relative_urls : false, button_placeholder_id : "element_id", button_image_url : "http://www.swfupload.org/button_sprite.png", button_width : 61, button_height : 22, button_text : "<b>Click</b> <span class="redText">here</span>", button_text_style : ".redText { color: #FF0000; }", button_text_left_padding : 3, button_text_top_padding : 2, button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES, button_disabled : false, button_cursor : SWFUpload.CURSOR.HAND, button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT, swfupload_loaded_handler : swfupload_loaded_function, mouse_click_handler : mouse_click_function, mouse_over_handler : mouse_over_function, mouse_out_handler : mouse_out_function, file_dialog_start_handler : file_dialog_start_function, file_queued_handler : file_queued_function, file_queue_error_handler : file_queue_error_function, file_dialog_complete_handler : file_dialog_complete_function, upload_start_handler : upload_start_function, upload_progress_handler : upload_progress_function, upload_error_handler : upload_error_function, upload_success_handler : upload_success_function, upload_complete_handler : upload_complete_function, debug_handler : debug_function, custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } } 设置参数的详细描述 Settings Description 【新】upload_url 默认值:空字符串 upload_url设置接收的是一个绝对的或者相对于SWF文件的完整URL。推荐使用完整的绝对路径,以避免由浏览器和FlashPlayer修改了基准路径设置而造成的请求路径错误。(yukon:这其实是相对的,如果你的swfupload和php上传文件处理页面始终是放在同一个网站文件夹里,我倒是推荐用相对路径) 如果设置对象的属性preserve_relative_urls为false,SWFUpload将会把相对路径转化成绝对路径,来避免URL在不同系统的flash player中被解析成各种不同的格式。如果你禁用SWFUploads的这个转换,应该使用相对路径来设定swfupload.swf的位置 注意:这里需要考虑FlashPlayer的安全域模型。 file_post_name 默认值:Filedata file_post_name参数允许你设置POST信息中上传文件的name值(类似传统Form中设置了<input type="file" name="Filedata"/>的name属性)。 注意:(2.5版待定)在Linux下面此参数设置无效,接收的name总为Filedata,因此为了保证最大的兼容性,建议此参数使用默认值。 【新】post_params 默认值:空的Object对象 post_params定义了一些键/值对,允许在上传每个文件时候捎带地post给服务器。这个属性可以用一个js数组对象来赋值。键/值对必须是纯字符串或者数字。(可用js的 typeof()函数检测) 注意: Flash Player 8 不支持捎带发送post数据. SWFUpload 会自动的以一个query string的形式发送post_params。 use_query_string 默认值:false 该属性可选值为true和false,设置post_params是否以GET方式发送。如果为false,那么则以POST形式发送。 引进自v2.1.0 【新】preserve_relative_urls 默认值:false preserve_relative_urls可选值为boolean变量。指示SWFUpload是否将相对URL转换成绝对URL。如果设置为true,那么不会转换。默认为false。即自动转换。 requeue_on_error 默认值:false 该属性可选值为true和false。如果设置为true,当文件对象发生uploadError时(除开fileQueue错误和FILE_CANCELLED错误),该文件对象会被重新插入到文件上传队列的前端,而不是被丢弃。如果需要,重新入队的文件可以被再次上传。如果要从上传队列中删除该文件对象,那么必须使用cancelUpload方法。 跟上传失败关联的所有事件同样会被一一触发,因此将上传失败的文件重新入队可能会和Queue Plugin造成冲突(或者是自动上传整个文件队列的自定义代码)。如果代码中调用了startUpload方法自动进行下一个文件的上传,同时也没有采取任何措施让上传失败的文件退出上传队列,那么这个重新入队的上传失败的文件又会开始上传,然后又会失败,重新入队,重新上传...,进入了无止境的循环。 该设置是在v2.1.0中引入的。 http_success 默认值:[] 该数组可自定义触发success事件的HTTP状态值。200的状态值始终会触发success,并且只有200的状态会提供serverData。 当接受一个200以外的HTTP状态值时,服务端不需要返回内容。 【新】assume_success_timeout 默认值:0 assume_success_timeout设定SWFUpload将等待多少秒来检测服务器响应,超时将强制触发上传成功 (uploadSuccess)事件。这个属性是为了在 Flash Player的bug下正常工作。避免长时间的等待服务器响应,同时解决flash player在mac操作系统下无法使服务器返回内容的bug。 flash在最后一个uploadProgress事件被触发30秒后将忽略服务器的响应而强制触发上传成功事件。 如果assume_success_timeout被设置为0,将禁用这个特性。 SWFUpload将长时间等待 Flash Player来触发 uploadSuccess事件. file_types 默认值:*.* 设置文件选择对话框的文件类型过滤规则,该属性接收的是以分号分隔的文件类型扩展名,例如“ *.jpg;*.gif”,则只允许用户在文件选择对话框中可见并可选jpg和gif类型的文件。默认接收所有类型的文件。 提醒:该设置只是针对客户端浏览器的过滤,对服务端的文件处理中的文件类型过滤没有任何限制,如果你需要做严格的文件过滤,那么服务端同样需要程序检测。 file_types_description 默认值:All Files 设置文件选择对话框中显示给用户的文件描述。 file_size_limit 默认值:0 设置文件选择对话框的文件大小过滤规则,该属性可接收一个带单位的数值,可用的单位有B,KB,MB,GB。如果忽略了单位,那么默认使用KB。特殊值0表示文件大小无限制。 提醒:该设置只对客户端的浏览器有效,对服务端的文件处理没有任何限制,如果你需要做严格文件过滤,那么服务端同样需要程序处理。 file_upload_limit 默认值:0 设置SWFUpload实例允许上传的最多文件数量,同时也是设置对象中file_queue_limit属性的上限。一旦用户已经上传成功或者添加文件到队列达到上最大数量,那么就不能继续添加文件了。特殊值0表示允许上传的数量无限制。只有上传成功(上传触发了uploadSuccess事件)的文件才会在上传数量限制中记数。使用setStats方法可以修改成功上传的文件数量。 注意:该值不能跨页面使用,当页面刷新以后该值也被重置。严格的文件上传数量限制应该由服务端来检测、管理。 file_queue_limit 默认值:0 设置文件上传队列中等待文件的最大数量限制。当一个文件被成功上传,出错,或者被退出上传时,如果文件队列中文件数量还没有达到上限,那么可以继续添加新的文件入队,以顶替该文件在文件上传队列中的位置。如果允许上传的文件上限(file_upload_limit)或者剩余的允许文件上传数量小于文件队列上限(file_queue_limit),那么该值将采用这个更小的值。 flash_url 默认值:空字符串 设置绝对或者相对于此上传页面的完整URL,一旦SWFupload实例化以后,此设置不能再被修改。 提醒:测试发现使用setUploadURL方法是可以修改此设置的。 【新】flash9_url (v2.5.0新增) 支持 Flash Player 9的Flash 控件(swf) 绝对或相对的URL flash_width (v2.1.0已删除) Defines the width of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px. flash_height (v2.1.0已删除) Defines the height of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px. flash_color ( v2.2.0已删除) This setting sets the background color of the HTML element that contains the flash. The default value is '#FFFFFF'. Note: This setting may not be effective in "skinning" 1px flash element in all browsers. prevent_swf_caching 默认值:true (v2.2.0新增)该布尔值设置是否在Flash URL后添加一个随机值,用来防止浏览器缓存了该SWF影片。这是为了解决一些基于IE-engine的浏览器上的出现一个BUG。 提醒:SWFUpload是直接在flash_url后添加了一个swfuploadrnd的随机参数。如果你给定的flash_url中已经存在了GET类型的参数,那么就会出现两个问号连接符导致错误。 debug 默认值:false 该值是布尔类型,设置debug事件是否被触发。 注意:SWFUpload代码中是将此变量和字符串true做的恒等判断,因此它只认定true为DEBUG模式开启,如果设置为1,虽然JS认定是开启模式,并且在初始化完毕后会有生成Debug Console,但后续操作中FLASH不会输出调试信息。(因为我习惯用1和0代表布尔变量,因此一度疑惑为何Flash的debug信息无法输出。) button_placeholder_id 默认值:null (v2.2.0新增) 该必要参数指定了swfupload.swf将要替换的页面内的DOM元素的ID值。当对应的DOM元素被替换为SWF元素时,SWF的容器会被添加一个名称为"swfupload"的样式选择器供CSS自定义使用。 button_image_url 默认值:空字符串 (v2.2.0新增) V2.2.0版最大的改变就是引入了一个按钮到SWF中,利用该参数可以设置一个相对于该swf文件或者是绝对地址的图片(或者是SWF),作为按钮的UI展现。所有FLASH支持的图片类型都可以使用(gif,jpg,png,或者是一个SWF)。 该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片) button_width 默认值:1 (v2.2.0新增) 设置该SWF的宽度属性。 button_height 默认值:1 (v2.2.0新增)设置该SWF的高度属性(按钮图片高度的1/4) button_text 默认值:空字符串 (v2.2.0新增) 该属性设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合button_text_style参数来设置。关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation。 button_text_style 默认值:"color: #000000; font-size: 16pt;" (v2.2.0新增)此参数配合button_text参数,可以通过CSS样式来设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation button_text_top_padding 默认值:0 (v2.2.0新增) 设置Flash Button上文字距离顶部的距离,可以使用负值。 button_text_left_padding 默认值:0 (v2.2.0新增) 设置Flash Button上文字距离左侧的距离,可以使用负值。 button_action 默认值:SWFUpload.BUTTON_ACTION.SELECT_FILES(多文件上传) (v2.2.0新增) 设置Flash Button点击以后的动作。默认为SWFUpload.BUTTON_ACTION.SELECT_FILES,点击按钮将会打开多文件上传的对话框。如果设置为SWFUpload.BUTTON_ACTION.SELECT_FILE,则为单文件上传。如果设置为SWFUpload.BUTTON_ACTION.START_UPLOAD,则启动文件上传。 button_disabled 默认值:false (v2.2.0新增) 该布尔值设置Flash Button是否是禁用状态。当它处于禁用状态的时候,点击不会执行任何操作。 button_cursor 默认值:SWFUpload.CURSOR.ARROW(箭头光标) (v2.2.0新增) 此参数可以设置鼠标划过Flash Button时的光标状态。默认为SWFUpload.CURSOR.ARROW,如果设置为SWFUpload.CURSOR.HAND,则为手形 button_window_mode 默认值:SWFUpload.WINDOW_MODE.WINDOW (v2.2.0新增) 此参数可以设置浏览器具体以哪种模式显示该SWF影片。 custom_settings 默认值:空的Object对象 该属性接收一个Object类型数据,可用于安全地存储与SWFUpload实例关联的自定义信息,例如属性和方法,而不用担心跟SWFUpload内部的方法和属性冲突以及版本升级的兼容。 设置完毕以后,可以通过实例的customSettings属性来访问。 var swfu = new SWFUpload({ custom_settings : { "My Setting" : "This is my setting", myothersetting : "This is my other setting", integer_setting : 100, a_dom_setting : document.getElementById("some_element_id") } }); var my_setting = swfu.customSettings["My Setting"]); swfu.customSettings["My Setting"] = "This is my new setting"; swfu.customSetting.myothersetting = "another new value"; swfu.customSetting.integer_setting += 25; swfu.customSetting["a_dom_setting"].style.visibility = "hidden"; Event Handlers 默认值:null 剩下的设置定义的是一系列事件处理的回调函数,在SWFUpload的操作过程中相应的事件会被触发。如果你需要在这些回调中进行自定义操作,那么你应该在设置中定义对应的JavaScript函数。 【新】Support Object SWFUpload实例的support属性(其类型是一个对象)能确认SWFUpload的某些特性是否能被浏览器使用的某版本Flash Player支持 { load : bool, // 标示SWFupload是否能在当前版本的 Flash Player中载入 imageResize : bool, // 标示当前时候安装了Flash Player 10或更新版本的Flash Player,并且SWFUpload 是否支持客户端调节上传图片的大小。 } File Object File对象包含了一组可用的文件属性,很多处理事件都会传递一个File Object参数来访问该文件的相关属性。 { id : string, // SWFUpload控制的文件的id,通过指定该id可启动此文件的上传、退出上传等 index : number, // 文件在选定文件队列(包括出错、退出、排队的文件)中的索引,getFile可使用此索引 name : string, // 文件名,不包括文件的路径。 size : number, // 文件字节数 type : string, // 客户端操作系统设置的文件类型 creationdate : Date, // 文件的创建时间 modificationdate : Date, // 文件的最后修改时间 filestatus : number // 文件的当前状态,对应的状态代码可查看SWFUpload.FILE_STATUS } Stats Object 该对象提供了上传队列的状态信息,访问实例的getStats方法可获取此对象。 该对象包括下面属性: { in_progress : number // 值为1或0,1表示当前有文件正在上传,0表示当前没有文件正在上传 files_queued : number // 当前上传队列中存在的文件数量 successful_uploads : number // 已经上传成功(uploadSuccess触发)的文件数量 upload_errors : number // 已经上传失败的文件数量 (不包括退出上传的文件) upload_cancelled : number // 退出上传的文件数量 queue_errors : number // 入队失败(fileQueueError触发)的文件数量 所有这些属性的值都可以使用setStats方法来修改,除了in_progress 和 files_queued。 插件 SWFUpload Plug-ins SWFUpload v2.0版本之后引入了几个插件。它们帮助SWFUpload实现一些功能 大多数插件使用文档在js插件(plugin)文件夹里 SWFObject SWFObject插件使用 SWFObject library 来将 SWFUpload Flash组件(Component)插入页面 这个插件也提供文档结构载入完毕检测功能(Document Ready loading) 。(yukon:可能此功能像是jQery的$(document).ready())和flash版本检测功能。详细使用方法以文档的方式记录在此插件文件夹内。你最好不要使用 SWFObject的文档结构载入完毕检测功能( Document Ready loading)和其他库的相似功能混搭共同使用。只用其中的一个就可以了。 Flash Player 10: 由于 Flash Player 10要求使用一个按钮来触发影片的相关操作,如果这个按钮 (设置对象里的button_placeholder_id属性可标示它的id)被css之类的设置成hidden或者display:none,SWFUpload将加载失败 。 Cookies 为了解决Flash Cookie的 Bug,Cookies插件将自动获取你浏览器的cookie,并随上传发送。cookie将以 POST or GET 形式随上传url发送。 此插件以POST或GET方式发送cookie的键/值对.在服务器端它们不会以cookie形式来解析。某些自动检测cookie来确认session和身份授权的框架可能并不能获取此插件传递的值。 Queue Handling Queue Handling插件提供队列处理功能。比如整个队列的上传,整个队列的取消,入队后自动开始上传。 Speed speed插件扩展了'file' 对象的几个属性用以描述当前上传情况。此插件包含了当前速度( current speed),平均速度( average speed),已上传时间( elapsed time),预计还需的时间( remaining time)等值。 已知的问题 Known Issues Flash Player以及许多浏览器的bug 困扰着SWFUpload. 但是我们一直在努力。 linux上的取消 Cancelling in Linux 使用Flash 9 Player以及更早版本,在linux操作系统上执行取消上传功能将可能导致浏览器崩溃。不过新版本的Flash Player改善了这个问题。 linux上的上传进度 Upload Progress in Linux linux上的 Flash Player只在上传完毕后发出一次上传进度事件 (uploadProgress) ,而不是像windows里那样上传过程中不断发出。 这是由于一些linux分发版会在上传过程中锁定整个浏览器。 MAC上的上传进度 Upload Progress in OS X 我们收到了一些关于MAC操作系统上Flash Player不能触发uploadProgress事件的报告。详细的情况还有待了解,但请注意其潜在的问题 MIME Type 无论文件的实际MIME格式是什么,Flash Player以 mime格式application/octet-stream 上传所有的文件 文件最大可选择数 Maximum number of selected files Flash Player本身并没有限制可选择上传文件数的最大值,但是限制了总文件名的最大长度。这个字符串是这样组成的: "文件名"空格"文件名"...。能上传文件的个数取决于操作系统对文件名总长度的限制。如果用户选择了过多的文件,将会收到flash player的警告消息,并且显示在文件选择对话框里(yukon:我在xp一次上传了173个文件仍然没警告。。) 代理 Proxies Flash Player可能不能正常的使用代理。 它在处理代理验证时候有些问题,可能导致某些冲突。 有些杀毒软件使用一个本地客户端代理来接收上传的文件并进行扫描,(貌似是截获了上传文件,并把它写入一个代理服务器,扫描完毕后才会真正发送给目标服务器)这导致SWFUpload错误的以为整个文件被上传了,它将的发出大量的uploadProgress事件,直到100%完毕。当代理真正地上传给目标服务器的过程中,SWFUpload看起来像是被暂停了。 卡巴斯基杀毒软件:卡巴斯基 (和其他一些杀软)实现了一个用户端的代理,用来截获本地上传出的数据。SWFUpload不能检测这个代理系统的存在。这些代理服务器能非常快地接收上传的文件,扫描后再发送给目标文件。 apache安全模块 Apache mod_security Apache的安全模块 mod_security验证服务器收到的 POST消息. Flash Player实现了一个边缘化的方式 (an edge case 翻成取巧的方式?) (有个参数可以决定是否验证) POST 上传文件,服务器也实现了。 安全套接层协议层 SSL 我们收到一些报告称Flash Player 不能通过SSL来上传. 这个问题的具体情况还没被确认,但是看起来确实在ssl下上传并不可靠。特别是使用公匙-自签名证书(self-signed certificates)时会出现问题。 同样,由不被信任的签发机构CA发放的 SSL 证书不能被Flash接受。因为flash并没有提供一个这样的接收证书的方法。就像前面说的cookie bug,windows下的flash player只接收它所信任的名单中的CA发放的证书,而不管浏览器正在使用中的证书。 授权 Authentication HTTP 的授权验证机制不能被Flash Player良好的支持. 最新版本的 Flash Player会好一些,旧版本的可能会造成浏览器崩溃 。 过早终止连接 Prematurely terminated connections 过早终止连接 Prematurely ending the response (比如ASP.NET中的Response.end()方法) 会导致原本上传完毕,SWFUpload却报告上传失败。 文件的POST名 Filedata POST name in Linux 改变文件接收名 (默认 “Filedata” ,设置对象中file_post_name属性) 在Linux的 Flash Player中并不起作用. Cookie bug 在Windows 下非IE浏览器 (FireFox, Opera, Safari, etc) flash插件将会发送IE的cookie . 这破坏了很多服务器的session和授权验证机制 开发者必须自己手动解决传递 Session 和授权 cookie 信息的问题,还要自己手动修改在服务器上的session。如果他们想使用session。 不过SWFUpload软件包里提供了一个PHP 或 ASP.Net里解决此bug的例子代码。 ExternalInterface类的bug( ExternalInterface bugs) 当和浏览器/js交互时,Flash Player不能正确使用escape方法编码数据。SWFUpload为解决这个问题做了很大的努力。将来如果这个bug修复了,SWFUpload将会发送而外的escape编码数据. 超长服务器数据bug (Server Data length bugs) 过长的服务器响应数据在MAC或Linux系统中的Flash Player下会导致错误。数据可能会被裁短,改变或者某些重复。我们建议服务器发回的数据尽量的短小简明。 Avant Browser 一旦被缓存了,SWFUpload不能正确工作在Avant浏览器上. SWFUpload v2.2.0版本后添加了 prevent_swf_caching 设置来试图解决这个问题 . 文件选择对话框与页面改变 File Dialog & Page Changing 在出现文件选择对话框时离开或者刷新页面将会导致浏览器崩溃。(所有浏览器,所有操作系统下) 这种情况大多出现在你设定了一个超级链接<a>的“onclick”调用selectFile/selectFiles ,但又没有禁止它默认的转跳动作,点击这个超链的同时会跳到其他页面但同时又打开了文件选择对话框。。 (yukon:还有种可能:程序使页面强制刷新、重定向。比如HTML <meta>标签里的refresh, ASP.NET的Response.Redirect(),php的header()等) 服务器脚本执行时间过长 Long Running Upload Scripts Flash上传文件给web服务器后,上传接收程序就会被执行。 接收程序决定是否存储它们,创建缩略图,扫描病毒等等,如果接收程序30秒内不返回任何数据,Flash将断开链接,并返回一个IO错误。 如果你不想这样做,那么在处理的过程中,让服务器返回几个字符或者数据(如果你可以)。 比如PHP,虽然PHP脚本能在Flash断开后继续成功地完成操作,但断开之后Flash将不会接收到任何返回数据。 窗口模式 WMODE / BUTTON_WINDOW_MODE 在某些浏览器中,如果flash控件没有处于屏幕显示区域,设定的WMODE(由BUTTON_WINDOW_MODE设定)会阻止flash控件的载入。,只有当你拉动滚动条,让flash控件处于屏幕显示区域,才会加载并呈现。 (yukon:这样做是为了让页面尽快呈现,比如你打开一个存满图片的文件夹,查看方式调为缩略图,猛的下拉,会看见下面的图片文件逐渐显示出内容来) 这种特性可能会对SWFObject插件有不利的影响。SWFUpload事件可能不会被触发,按钮的背景图可能不会被载入除非控件呈现完毕。 某些操作系统中 (Linux ) 当 WMODE被设置为透明, Flash 打开的文件选择对话框会在浏览器窗口之后。 内存泄露 Memory Leaks 一些浏览器 (特别是 IE)不能在flash player用 ExternalInterface类与js交互后回收内存,(比如 SWFUpload). 生成过多的SWFUpload实例并且刷新几次页面将导致浏览器占用内存过多,进而导致浏览器崩溃或者其他一些系统错误。 在 v2.2.0版本的 SWFUpload中,我们实现了一些预防内存泄露的机制。但是还是推荐您在页面关闭时候调用destroy()方法。如果你在一个页面使用几百个SWFUpload实例,你必须小心测试以防内存泄露。 有关MAC操作系统的一些问题 Other Mac Issues 服务器返回的数据或 Mac系统上的 Flash Player 可能并不会触发 uploadSuccess 事件.我们添加了一个 assume_success_timeout 设置来帮助解决这个问题 。但是通常情况下,在接收成功后返回一个简短的字段是十分容易且可靠的。 有些用户反映在Mac系统下上传给含子域名的地址时有一些问题 有些用户反映重定向(HTTP 状态码 302) 不能被 Mac Flash Player很好的处理. Windows 下似乎没这个问题. 302 重定向经常用在一些授权模式和MVC设计框架中。 flash的开发文档指出 在早于 OS X 10.3版本的系统中, bytes loaded 一直会是 -1. SWFUpload把它改成了 0,但是 total bytes将不会被发送出来,进度永远到不了100% 。因此请设定在上传完毕,发出uploadSuccess 或 uploadComplete事件时更新UI让其显示100%。以此来让UI在各系统统一。 有些用户反映Mac Flash Player上传路径有空格字符时将出现问题. 请将它们替换成+或者%20 有些用户反映Mac Flash Player 会在 HTTP HOST头里加入端口号 (比如 http://www.example.com:80). 如果你检查这个参数,要小心对付这个问题。 文件如果只包含一个资源分支(resource fork),将会被Flash Player以0字节文件对待,不能上传(提示: Flash Player 10.1可能解决了这个问题) 本文转自挨踢前端博客园博客,原文链接http://www.cnblogs.com/duanhuajian/p/3196049.html如需转载请自行联系原作者 @挨踢前端
文章
Web App开发  ·  JavaScript  ·  前端开发  ·  开发者  ·  内存技术
2017-11-29
跳转至:
开发与运维
5595 人关注 | 131323 讨论 | 299036 内容
+ 订阅
  • 如何使用MASA.Blazor
  • 阿里云国际版Linux系统的ECS实例内部无法正常解析域名
  • 阿里云国际版使用自定义镜像创建的ECS实例没有网关
查看更多 >
数据库
252229 人关注 | 50600 讨论 | 93866 内容
+ 订阅
  • 阿里云国际版Linux系统的ECS实例内部无法正常解析域名
  • 阿里云国际版使用SSH远程连接实例时提示“所选的用户密钥未在远程主机上注册,请再试一次。”
  • 阿里云国际版使用自定义镜像创建的ECS实例没有网关
查看更多 >
安全
1179 人关注 | 23940 讨论 | 80496 内容
+ 订阅
  • 阿里云国际版Linux系统的ECS实例内部无法正常解析域名
  • 阿里云国际版使用SSH远程连接实例时提示“所选的用户密钥未在远程主机上注册,请再试一次。”
  • 阿里云国际版使用自定义镜像创建的ECS实例没有网关
查看更多 >
云原生
233515 人关注 | 11283 讨论 | 44678 内容
+ 订阅
  • 阿里云服务器ESSD云盘性能级别PL0、PL1、PL2和PL3详解
  • WPF鼠标、键盘、拖拽事件、用行为封装事件
  • CrossOver2023软件下载使用步骤讲解
查看更多 >