﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-MemoryGarden's Blog-随笔分类-AS3</title><link>http://www.cppblog.com/MemoryGarden/category/19934.html</link><description>努力

                                  -----------大能猫</description><language>zh-cn</language><lastBuildDate>Thu, 20 Sep 2012 05:32:00 GMT</lastBuildDate><pubDate>Thu, 20 Sep 2012 05:32:00 GMT</pubDate><ttl>60</ttl><item><title>SWFupload 利器</title><link>http://www.cppblog.com/MemoryGarden/archive/2012/09/20/191375.html</link><dc:creator>memorygarden</dc:creator><author>memorygarden</author><pubDate>Thu, 20 Sep 2012 04:18:00 GMT</pubDate><guid>http://www.cppblog.com/MemoryGarden/archive/2012/09/20/191375.html</guid><wfw:comment>http://www.cppblog.com/MemoryGarden/comments/191375.html</wfw:comment><comments>http://www.cppblog.com/MemoryGarden/archive/2012/09/20/191375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MemoryGarden/comments/commentRss/191375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MemoryGarden/services/trackbacks/191375.html</trackback:ping><description><![CDATA[转：&nbsp;<a href="http://blog.csdn.net/iamduoluo/article/details/6653733" title="出处">出处<br /><br /><br /><h2>什么是SWFUpload</h2><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">SWFUpload是一个网站前端文件上传组件。SWFUpload通过flash+javascript，实现在不刷新网页的条件下，多个文件批量上传（实际上是逐个上传）、以及显示上传进度。</p><h2><a name="t1" style="color: rgb(202, 0, 0); "></a>SWFUpload基本原理</h2><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>1、传统的html表单文件上传</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">传统的文件上传是使用下面这种Form的：</p><div "="" id="highlighter_125833" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>&lt;</code><code>form</code>&nbsp;<code>id</code><code>=</code><code>"file-form"</code>&nbsp;<code>action</code><code>=</code><code>"<a href="http://www.gearcode.com/upload.php" style="color: #ca0000; text-decoration: initial; ">http://www.gearcode.com/upload.php</a>"</code>&nbsp;<code>enctype</code><code>=</code><code>"multipart/form-data"</code>&nbsp;<code>method</code><code>=</code><code>"post"</code><code>&gt;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>&lt;</code><code>input</code>&nbsp;<code>name</code><code>=</code><code>"filename"</code>&nbsp;<code>type</code><code>=</code><code>"file"</code>&nbsp;<code>/&gt;</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>&lt;</code><code>input</code>&nbsp;<code>type</code><code>=</code><code>"submit"</code>&nbsp;<code>value</code><code>=</code><code>"上传"</code>&nbsp;<code>/&gt;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td><code>&lt;/</code><code>form</code><code>&gt;</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">这样的表单，每个input file只能选择一个文件，如果用户想批量上传，则需要使用js动态的向表单中添加&#8220;&lt;input type="file" name="filename"/&gt;&#8221;。用户则需要去点击每一个input file的&#8220;浏览&#8221;按钮，打开选择文件的窗口去逐个选择文件。而不是打开一个能选择多个文件的窗口，一次性的使用ctrl或shift等快捷键选择一个或多个文件。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">而且，当用户选择好文件，点击上传后，表单就会提交出去，至于文件上传的进度如何，上传速度怎样，都不得而知。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>2、使用SWFUpload后的上传</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">SWFUpload通过向网页中插入一个flash按钮，让用户点击来弹出文件选择的对话框。也就是说，选择文件对话框，是由swfupload.swf中弹出的，当然这需要用户点击这个flash才可以。所以swfupload在初始化时需要设置它显示出来的按钮的样式，例如宽、高、背景色、字体、内间距、图片等等&#8230;&#8230;。除了这些样式，还需要设置按钮显示的位置，以及其他一些配置，这些常用配置在本文的后面会详细介绍。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">因为SWFUpload的选择文件对话框是由flash弹出的，所以这个对话框是可以选择多个文件的。选择好文件以后，swfupload.swf会回调一些javascript函数，将选择文件的一些基本信息作为参数传给这些回调函数，以便开发者通过设置这些回调函数，来改变html从而将这些文件信息显示到页面中。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">在选择好要上传的文件后，这些文件就会被加入到swfupload的上传队列中，一旦调用swfupload实例的&#8220;startUpload()&#8221;函数，swfupload就会通过flash将文件上传到我们指定的地址，这个上传地址也是可以在实例化SWFUpload时设置的，而这个地址则是一个接收文件的action，例如传统文件上传表单中的action="upload.php"。这里需要注意的是，调用startUpload后，swfupload只会将上传文件队列中的第一个未上传的文件提交出去，而不是同时将上传文件队列中所有的文件提交出去，如果在一个文件上传完毕后，再次调用startUpload，swfupload就会开始上传队列中下一个没有上传的文件。所以，如果想实现自动批量上传的话，只需要在上传完成的回调函数中，去调用startUpload就可以了。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">在上传过程中，swfupload会有很多的事件产生，例如上传开始、上传进度变化、上传出错、上传成功、上传完成&#8230;&#8230;我们可以设置这些事件的回调函数，swfupload在发生这些事件的时候，会去调用我们的回调函数，并将相应的信息以参数的形式发送给我们的回调函数。这样我们便可以通过处理这些事件来动态的显示文件上传的状态、进度等信息了。</p><h2><a name="t2" style="color: rgb(202, 0, 0); "></a>开始前的准备</h2><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>1、获取SWFUpload</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">SWFUpload的官方地址为：<a href="http://www.swfupload.org/" target="_blank" style="color: #ca0000; text-decoration: initial; ">http://www.swfupload.org/</a>，SWFUpload的下载放在了google code上：<a href="http://code.google.com/p/swfupload/downloads/list" target="_blank" style="color: #ca0000; text-decoration: initial; ">http://code.google.com/p/swfupload/downloads/list</a>，此文使用的是：<a href="http://swfupload.googlecode.com/files/SWFUpload%20v2.2.0.1%20Core.zip" style="color: #ca0000; text-decoration: initial; ">SWFUpload v2.2.0.1</a>。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>2、在线文档</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><a href="http://demo.swfupload.org/Documentation/" target="_blank" style="color: #ca0000; text-decoration: initial; ">http://demo.swfupload.org/Documentation/</a></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>3、SWFUpload 2.2 的Demos</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><a href="http://demo.swfupload.org/v220/index.htm" target="_blank" style="color: #ca0000; text-decoration: initial; ">http://demo.swfupload.org/v220/index.htm</a></p><h2><a name="t3" style="color: rgb(202, 0, 0); "></a>使用SWFUpload上传文件</h2><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>1、初始化SWFUpload</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">首先将下载下来的&#8220;<a href="http://swfupload.googlecode.com/files/SWFUpload%20v2.2.0.1%20Core.zip" style="color: #ca0000; text-decoration: initial; ">SWFUpload v2.2.0.1 Core</a>&#8221;压缩包解压，会得到一个swfupload.js、以及一个swfupload.swf（在Flash目录中），将这两个文件copy到你的项目中。压缩包中还会有一些其他的文件，例如英文的文档、ChangeLog、License等文件，不在本文讨论范围内，实际应用时也无需导入到你的项目中。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">在使用SWFUpload上传组件的页面引入swfupload.js：</p><div "="" id="highlighter_281761" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>&lt;</code><code>script</code>&nbsp;<code>type</code><code>=</code><code>"text/javascript"</code>&nbsp;<code>src</code><code>=</code><code>"<a href="http://www.gearcode.com/lib/swfupload/swfupload.js" style="color: #ca0000; text-decoration: initial; ">http://www.gearcode.com/lib/swfupload/swfupload.js</a>"</code>&nbsp;<code>type</code><code>=</code><code>"text/javascript"</code><code>&gt;&lt;/</code><code>script</code><code>&gt;</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">这个swfupload.js是SWFUpload组件提供的一个javascript类库，是用来初始化及设置swfupload.swf的。其中有一个名为&#8220;SWFUpload&#8221;的function，我们通过创建这个function的实例来初始化SWFUpload，同时传入一些初始化配置信息。需要注意的是，一定要在网页加载完成后再去new这个SWFUpload，因为swfupload.swf是通过替换掉页面中的一个html元素来确定自己显示出来的位置的。所以如果在这个html元素还没被创建出来的时候，就去实例化SWFUpload的话，就会出现javascript错误。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">实例化SWFUpload，并设置初始化参数：</p><div "="" id="highlighter_910802" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>01</code></td><td><code>var</code>&nbsp;<code>swfu;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>02</code></td><td><code>// 这里使用了JQuery，在body onload后，也就是网页加载完成后，实例化SWFUpload。</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>03</code></td><td><code>$(</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>04</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>swfu =&nbsp;</code><code>new</code>&nbsp;<code>SWFUpload(config == undefined ? {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>05</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>upload_url : path+</code><code>"/fileUpload.action"</code><code>,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>06</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>flash_url : path+</code><code>"/plugin/uploader/SWFUpload/swfupload.swf"</code><code>,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>07</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>file_size_limit :&nbsp;</code><code>"20 KB"</code><code>,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>08</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>file_types :&nbsp;</code><code>"*.jpg;*.jpeg;*.png;*.bmp;*.gif"</code><code>,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>09</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>file_types_description :&nbsp;</code><code>"All Image Files"</code><code>,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>10</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>file_post_name :&nbsp;</code><code>"fileQueue"</code><code>,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>11</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>12</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_placeholder_id :&nbsp;</code><code>"spanSWFUploadButton"</code><code>,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>13</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_width : 60,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>14</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_height : 20,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>15</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_text :&nbsp;</code><code>"&lt;b&gt;添加文件&lt;/b&gt;"</code><code>,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>16</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_text_left_padding : 3,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>17</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_text_top_padding : 2,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>18</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>button_cursor : SWFUpload.CURSOR.HAND,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>19</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>20</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>//handler</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>21</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>file_queued_handler : Handler.fileQueued,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>22</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>file_queue_error_handler : Handler.fileQueueError,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>23</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>upload_complete_handler : Handler.uploadComplete,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>24</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>upload_start_handler : Handler.uploadStart,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>25</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>upload_progress_handler : Handler.uploadProgress,</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>26</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>upload_success_handler : Handler.uploadSuccess</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>27</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>});</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>28</code></td><td><code>});</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">通过上面的代码可以创建一个SWFUpload的实例&#8220;swfu&#8221;，后面对文件队列的操作都需要通过调用这个实例的方法来完成。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">初始化参数中&#8220;button_placeholder_id&#8221;为页面上的一个html节点的ID，成功初始化SWFUpload后，会将此节点替换为swfupload.swf。其他以&#8220;button_&#8221;开头的参数都是用来设置swfupload.swf的显示样式的。大部分初始化参数非常简单，这里不一一赘述，用户可以查阅前面提到的<a href="http://demo.swfupload.org/Documentation/" style="color: #ca0000; text-decoration: initial; ">SWFUpload的在线文档</a>。这里有一点需要注意，初始化SWFUpload后，页面上对应的html节点被替换为我们设置的flash按钮，但如果你的页面不是以http协议打开的，点击这个按钮是不会弹出选择文件对话框的。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">例如，我直接在桌面上的文件夹中打开页面：</p><blockquote style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p style="margin: 0px; padding: 0px; ">file:///C:/Documents and Settings/JasonLee/桌面/upload/upload.html</p></blockquote><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">以这样的方式打开页面，点击flash按钮是不会弹出选择文件对话框的。所以测试的时候要将页面上传部署到服务器上，以http协议打开，例如：</p><blockquote style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p style="margin: 0px; padding: 0px; ">http://www.gearcode.com/demo/file-upload/upload.html</p></blockquote><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>2、开始上传</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">完成初始化以后，点击flash上传按钮便会打开选择文件对话框。选择好文件后，对话框关闭，被选择的文件将进入上传队列。如果要开始上传，只需要调用SWFUpload的startUpload函数即可，例如：</p><div "="" id="highlighter_855141" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>swfu.startUpload();</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">但是如果队列中有多个文件，调用startUpload()后只会上传第一个未上传的文件，所以前面提到了，SWFUpload的批量上传实际上就是自动逐个上传文件。如果要实现自动批量上传只需要在上传文件成功后，再次调用开始上传方法。我们可以通过设置SWFUpload的handler函数来实现：</p><div "="" id="highlighter_415790" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>upload_complete_handler:&nbsp;</code><code>function</code><code>(file) {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>this</code><code>.startUpload();</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>}</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><strong>3、handler函数</strong></p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">SWFUpload在工作的过程中，会产生很多事件。这些事件对我们来说有很多用处（例如想在页面中显示文件大小、上传进度、速度等信息），我们可以设置handler函数来监控这些事件，当SWFUpload触发这些事件时，会主动调用我们设置的回调函数，并将文件信息作为参数传递给我们的回调函数。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">SWFUpload的handler函数有很多，这里只介绍以下6个常用的事件回调函数：</p><table border="1" cellpadding="1" cellspacing="1" style="color: #000000; font-family: Arial; font-size: 14px; line-height: 26px; text-align: left; background-color: #ffffff; "><thead><tr><th scope="col">事件名称</th><th scope="col">初始化参数名称</th><th scope="col">参数</th><th scope="col">事件触发</th></tr></thead><tbody><tr><td>fileQueued</td><td>file_queued_handler</td><td>file</td><td>每个文件进入上传队列时触发</td></tr><tr><td>fileQueueError</td><td>file_queue_error_handler</td><td>file, errorCode, message</td><td>每个文件进入上传队列时，如果出错则触发</td></tr><tr><td>uploadStart</td><td>upload_start_handler</td><td>file</td><td>每个文件开始上传时触发</td></tr><tr><td>uploadProgress</td><td>upload_progress_handler</td><td>file, bytesLoaded, bytesTotal</td><td>每个文件的上传进度发生改变时触发</td></tr><tr><td>uploadSuccess</td><td>upload_success_handler</td><td>file, serverData</td><td>每个文件上传成功后触发</td></tr><tr><td>uploadComplete</td><td>upload_complete_handler</td><td>file</td><td>每个文件上传完毕后触发</td></tr></tbody></table><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">例如我需要监听uploadProgress事件，则需要在SWFUpload初始化时，设置upload_progress_handler参数的值：</p><div "="" id="highlighter_272627" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>swfu =&nbsp;</code><code>new</code>&nbsp;<code>SWFUpload({</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>//省略其他初始化参数...</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>upload_progress_handler: uploadProgress</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td><code>});</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">然后再建立监听事件的回调函数：</p><div "="" id="highlighter_99722" style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>function</code>&nbsp;<code>uploadProgress(file, bytesLoaded, bytesTotal) {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>//...</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>}</code></td></tr></tbody></table></div></div></div><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">这样，在文件上传时，每次上传进度发生改变，都会调用uploadProgress这个函数，并且将文件的信息、已经上传的字节数、文件的总字节数发送给回调函数。</p><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">其他的回调函数使用方法都一样，这里就不一一介绍了，最后介绍一下回调函数的参数file。几乎所有的回调函数都会将file作为参数，file是一个javascript对象，其结构如下（来自官方的在线文档）：</p><blockquote style="color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p style="margin: 0px; padding: 0px; ">{<br />&nbsp;&nbsp;&nbsp; id : string,<br />&nbsp;&nbsp; &nbsp;index : number,<br />&nbsp;&nbsp; &nbsp;name : string,<br />&nbsp;&nbsp; &nbsp;size : number,<br />&nbsp;&nbsp; &nbsp;type : string,<br />&nbsp;&nbsp; &nbsp;creationdate : Date,<br />&nbsp;&nbsp; &nbsp;modificationdate : Date,<br />&nbsp;&nbsp; &nbsp;filestatus : number,<br />}</p></blockquote><p style="margin: 0px; padding: 0px; color: #000000; font-family: Arial; line-height: 26px; background-color: #ffffff; ">下面是file对象中的每个属性的简单说明：</p><table border="1" cellpadding="1" cellspacing="1" style="color: #000000; font-family: Arial; font-size: 14px; line-height: 26px; text-align: left; background-color: #ffffff; "><thead><tr><th scope="col">属性名</th><th scope="col">类型</th><th scope="col">说明</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>SWFUpload为队列中的文件生成的ID</td></tr><tr><td>index</td><td>number</td><td>文件的索引值，使用getFile(index)可以获取该文件</td></tr><tr><td>name</td><td>string</td><td>原文件名，不包含原文件目录</td></tr><tr><td>size</td><td>number</td><td>文件的尺寸，单位：byte</td></tr><tr><td>type</td><td>string</td><td>文件类型</td></tr><tr><td>creationdate</td><td>Date</td><td>文件的创建时间</td></tr><tr><td>modificationdate</td><td>Date</td><td>文件的最后修改时间</td></tr><tr><td>filestatus</td><td>number</td><td>文件在上传队列中的状态，可以使用SWFUpload.FILE_STATUS比较值<br /><br /></td></tr></tbody></table></a><img src ="http://www.cppblog.com/MemoryGarden/aggbug/191375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MemoryGarden/" target="_blank">memorygarden</a> 2012-09-20 12:18 <a href="http://www.cppblog.com/MemoryGarden/archive/2012/09/20/191375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义事件</title><link>http://www.cppblog.com/MemoryGarden/archive/2012/09/16/190891.html</link><dc:creator>memorygarden</dc:creator><author>memorygarden</author><pubDate>Sun, 16 Sep 2012 09:24:00 GMT</pubDate><guid>http://www.cppblog.com/MemoryGarden/archive/2012/09/16/190891.html</guid><wfw:comment>http://www.cppblog.com/MemoryGarden/comments/190891.html</wfw:comment><comments>http://www.cppblog.com/MemoryGarden/archive/2012/09/16/190891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MemoryGarden/comments/commentRss/190891.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MemoryGarden/services/trackbacks/190891.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/MemoryGarden/archive/2012/09/16/190891.html'>阅读全文</a><img src ="http://www.cppblog.com/MemoryGarden/aggbug/190891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MemoryGarden/" target="_blank">memorygarden</a> 2012-09-16 17:24 <a href="http://www.cppblog.com/MemoryGarden/archive/2012/09/16/190891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>