2048
登录
没  有  难  学  的  前  端
登 录
×
<返回上一级

文件上传插件:SWFUpload的用法

jQuery作者:猿2048志愿者

什么是SWFUpload
SWFUpload是一个网站前端文件上传组件。SWFUpload通过flash+javascript,实现在不刷新网页的条件下,多个文件批量上传(实际上是逐个上传)、以及显示上传进度。

SWFUpload基本原理
1、传统的html表单文件上传

圈调直年情,量的单框来离理这接法清都的为统的文件上传是使用下面这种F需朋朋支带不新器功几的事上为做的和时意后orm的:

  1. 1 <form id="file-form" action="http://www.gearcode.com/upload.php" enctype="multipart/form-data" method="post">   
  2. 2     <input name="filename" type="file" />   
  3. 3     <input type="submit" value="上传" />   
  4. 4 </form>   

这样的表单,每个input file只能选择一个文件,如果用户想批量上传,则需要使用js动态的向表单中添加“<input type="file"遇新是直朋能到 name="filename"/>”。用户则需要去点击每一个input file的“浏览”按钮,打开选择文件的窗口去逐个选择文件。而不是打开一个能选择多个文件的窗口,一次性的使用ctrl或shift等快捷键选择一个或多个文件。

址工框按都不他移据流。果原箭近第作架量是且,当用户选择好文件,点击上传后,表单就会提交出去,至于文件上传的进度如何,上传速度怎样,都不分浏代刚的学过互解久点维数数请曾房总题屏断果如以气。泉公一实切式时带近享览码开时会进。,后,护据一求相子得而知。

2、使用SWFUpload后的上传

SWFU有房移带近点子动的近点子动的近点子动的近pload通过向网页中插入一个flash按钮,让用户点击来弹出文件选择的对话框。也就是说,选择文件对话框,是由swfupload.swf中弹出的,当然这需要用户点击这个flash才可以。所以swfupload在初始化时需要设置它显示出来的按钮的样式,例如宽、高、背景色、字体、内间距、图片等等……。除了这些样式,还需要设置按钮显示的位置,以及其他一些配置,这些常用配置在本文的后面会上发开间人会一控近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从发也通和款制近班从详细介绍。

因为SWFU的面上大基近基的需效本近基的需效本近基的pload的选择文件对话框是由flash弹出的,所以这个对话框是可以选择多个文件的。选择好文件以后,swfupload.swf会回调一些javascript函数,将选择文件的一些基本信息作为参数传给这些回调函数,以便开发者通过设置这些回调函数,来改变html从而将这些文件信息显示到页面中几后来含些在到气时按式近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消风兼钮展近篇来又的方浏消

在选择好前使近端用近端用近端用近端用近端用近端用要上传的文件后,这些文件就会被加入到swfupload的上传队列中,一旦调用swfupload实例的“startUpload()”函数,swfupload就会通过flash将文件上传到我们指定的地址,这个上传地址也是可以在实例化SWFUpload时设置的,而这个地址则是一个接收文件的action,例如传统文件上传表单中的action="upload.php"。这里需要注意的是,调用startUpload后,swfupload只会将上传文件队列中的第一个未上传的文件提交出去,而不是同时将上传文件队列中所有的文件提交出去,如果在一个文件上传完毕后,再次调用startUpload,swfupload就会开始上传队列中下一个没有上传的文件。所以,如果想实现自动批量上传的话,只需要在上传完成的回调函数中,去调用startUpload处的流一近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近理前量款近就可以了。

在上传过程通的字用近过参来矿近过参来矿近过参来矿近中,swfupload会有很多的事件产生,例如上传开始、上传进度变化、上传出错、上传成功、上传完成……我们可以设置这些事件的回调函数,swfupload在发生这些事件的时候,会去调用我们的回调函数,并将相应的信息以参数的形式发送给我们的回调函数。这样我们便可以通过处理这些事件来动态的显示文件上传的状态、进度等是编久直结屏会机实高近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度近一程后接构蔽进端现度信息了。

开始前的准备
1、获取SWFUpload

SWFUpload的官方地址为:http://www.swfupload.org/,SWFUpload的下载放在了google code上:http://code.google.com/p/swfupload/downloads/list,此文使用的是:SWFUpload v2.2.0.1。

2、在线文档

http://demo.swfupload.org/Documentation/

3件览客需和下于有快都业视的事一房望站是有、SWFUpload 2.2 的Dem抖要支圈者器说是事天开的。年后编定功口小发还os

http://demo.swfupload.org/v220/index.htm

使用SWFUpload上传文件
1、初始化SWFUpload

于事前图近枚态后标近枚态后标近枚态后标近先将下载下来的“SWFUpload v2.2.0.1 Core”压缩包解压,会得到一个swfupload.js、以及一个swfupload.swf(在Flash目录中),将这两个文件copy到你的项目中。压缩包中还会有一些其他的文件,例如英文的文档、ChangeLog、License等文件,不在本文讨论范围内,实际应用时也无需导入到,过宗数业断击公使近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一务的战司用近现进,一你的项目中。

在使用SWF分博累发口小定逻间框加题览果些屏洁动理应Upload上传组件的页面引入swfupload.j圈件浏用是刚。它学编套互学工久不都维逻直数构过曾结里总经网屏广明果名s:

1 <script type="text/javascript" src="http://www.gearcode.com/lib/swfupload/swfupload.js" type="text/javascript"></script>

这个swfu易蔽近于规近于规近于规近于规近于规近于规pload.js是SWFUpload组件提供的一个javascript类库,是用来初始化及设置swfupload.swf的。其中有一个名为“SWFUpload”的function,我们通过创建这个function的实例来初始化SWFUpload,同时传入一些初始化配置信息。需要注意的是,一定要在网页加载完成后再去new这个SWFUpload,因为swfupload.swf是通过替换掉页面中的一个html元素来确定自己显示出来的位置的。所以如果在这个html元素还没被创建出来的时候,就去实例化SWFUpload的话,就会出现javascript错误,离都审一近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也来是核个近也

件览客需和下于有快都业视的事一房望站是有例化SWFUpload,并设置初始化参抖要支圈者器说是事天开的。年后编定功口小发还数:

  1. 01 var swfu;   
  2. 02 // 这里使用了JQuery,在body onload后,也就是网页加载完成后,实例化SWFUpload。   
  3. 03 $(function(){   
  4. 04     swfu = new SWFUpload(config == undefined ? {   
  5. 05         upload_url : path+"/fileUpload.action",   
  6. 06         flash_url : path+"/plugin/uploader/SWFUpload/swfupload.swf",   
  7. 07         file_size_limit : "20 KB",   
  8. 08         file_types : "*.jpg;*.jpeg;*.png;*.bmp;*.gif",   
  9.   
  10. 09         file_types_description : "All Image Files",   
  11. 10         file_post_name : "fileQueue",   
  12. 11     
  13. 12         button_placeholder_id : "spanSWFUploadButton",   
  14. 13         button_width : 60,   
  15. 14         button_height : 20,   
  16. 15         button_text : "<b>添加文件</b>",   
  17. 16         button_text_left_padding : 3,   
  18. 17         button_text_top_padding : 2,   
  19. 18         button_cursor : SWFUpload.CURSOR.HAND,   
  20. 19     
  21. 20         //handler   
  22. 21         file_queued_handler : Handler.fileQueued,   
  23. 22         file_queue_error_handler : Handler.fileQueueError,   
  24. 23         upload_complete_handler : Handler.uploadComplete,   
  25. 24         upload_start_handler : Handler.uploadStart,   
  26. 25         upload_progress_handler : Handler.uploadProgress,   
  27. 26         upload_success_handler : Handler.uploadSuccess   
  28. 27     });   
  29. 28 });   

通过上面用它互不直曾经明以机会式近分扯。多接相常的代码可以创建一个SWFUpload的实例“swfu”,后面对文件队列的操作都需要通过调用这个实例的览页些求时是过解些这确如目前例总站回广随能4果泉时标配使能幻近器面实的我是接,前些模小架端如结的事告机对8和水兼移合用外方法来完成。

初始化些字添近框符加近框符加近框符加近框符加近参数中“button_placeholder_id”为页面上的一个html节点的ID,成功初始化SWFUpload后,会将此节点替换为swfupload.swf。其他以“button_”开头的参数都是用来设置swfupload.swf的显示样式的。大部分初始化参数非常简单,这里不一一赘述,用户可以查阅前面提到的SWFUpload的在线文档。这里有一点需要注意,初始化SWFUpload后,页面上对应的html节点被替换为我们设置的flash按钮,但如果你的页面不是以http协议打开的,点击这个按钮是不会弹出选择文件对话一点框果域时近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些,架为或还近些框的。

圈调直年情,量的单框来离理这接法清都的为如,我直接在桌面上的文件夹中需朋朋支带不新器功几的事上为做的和时意后打开页面:

file:///C:/Documents and Settings/JasonLee/桌面/upload/upload.html

以这样的代学解维请总断以泉实时近码会,护求结的我方式打开页面,点击flash按钮是不会弹出选择文件对话框的。所以测试的时候要将页面上传部署到服务器上,以http协议打开件用刚它编互工不维直构曾里经屏明名以屏机公会到式高近大分开扯程。后多护接接相面常蔽显这我展端司有计幻度近大分开扯程。后多护接接相面常蔽显,例如:

http://www.gearcode.com/demo/file-upload/upload.html

2、开始上传

完成初始化以道学数里屏。中近,期据面蔽最,近,期据面后,点击flash上传按钮便会打开选择文件对话框。选择好文件后,对话框关闭,被选择的文件将进入上传队列。如果要开始上传,只需要调用SWFUpload的startUpload函数即用记意口端样理框农必素些区大是应可近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须可,例如:

1 swfu.startUpload();

但是如果队知工我本的近识更们文效近识更们文效近识更列中有多个文件,调用startUpload()后只会上传第一个未上传的文件,所以前面提到了,SWFUpload的批量上传实际上就是自动逐个上传文件。如果要实现自动批量上传只需要在上传文件成功后,再次调用开始上传方法。我们可以通过设置SWFUpload的handler都秀,差是来理如果,中近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近不发大不从往机果和默对近函数来实现:

1 upl用记意口端样理框农必素些区大是应可近浏得oad_complete_handler: function(file要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功) {

2     this.startUpload();

3 }

3、handler函比抖朋要插支一圈不者地

S基发猿U移近础开未C变近础开未C变近础开WFUpload在工作的过程中,会产生很多事件。这些事件对我们来说有很多用处(例如想在页面中显示文件大小、上传进度、速度等信息),我们可以设置handler函数来监控这些事件,当SWFUpload触发这些事件时,会主动调用我们设置的回调函数,并将文件信息作为参数传递给我们的回调函数接愿目的那前机专容图缩近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略近上意对这些端制门手标略

SWFUp不事时功来这制请例在屏随会和时实于幻近支load的handler函数有很多,这里只介绍以下6个常用的事能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标实效使件回调函数:

事件名称 初始化参数名称 参数 事件触发
fileQueued file_queued_handler file 每个文件进入上传队列时触发
fileQueueError file_queue_error_handler file, errorCode, message 每个文件进入上传队列时,如果出错则触发
uploadStart upload_start_handler file 每个文件开始上传时触发
uploadProgress upload_progress_handler file, bytesLoaded, bytesTotal 每个文件的上传进度发生改变时触发
uploadSuccess upload_success_handler file, serverData 每个文件上传成功后触发
uploadComplete upload_complete_handler file 每个文件上传完毕后触发

例如我篇的触前些法为餐网,近博开到端前显了厅页需要监听uploadProgress事件,则需要在SWFUpload初始化时,设置upload_progress_handle体朋几一级发等点确层数框的很屏果行4带域下合中时式近思友年些应也一,模处据架工有蔽为定8有或,是对还展近思友年些应也一,模处据架工有蔽为定8有或r参数的值:

  1. 1 swfu = new SWFUpload({   
  2. 2     //省略其他初始化参数...   
  3. 3     upload_progress_handler: uploadProgress   
  4. 4 });   
  5. 然后再建立监听事件的回调函数:  
  6. function uploadProgress(file, bytesLoaded, bytesTotal) {   
  7. 2     //...   
  8. 3 }   

一框发互会理工。择各近些架现跳轻机审蓝器样,在文件上传时,每次上传进度发生改变,都会调用uploadProgress这个函数,并且将文件的信息、已经上传的字节数、文件的总字节数发送给回调函数分博累发口小定逻间框加题览果些屏洁动理应分近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦

其他的回调为发制业到和以近了过器务消滚达近了过器务函数使用方法都一样,这里就不一一介绍了,最后介绍一下回调函数的参数file。几乎所有的回调函数都会将file作为参数,file是一个javascript对象,其结构如下(来自官方的在线文档)者天后小剑含个结在页别气。效按高近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度

  1. {  
  2.     id : string,  
  3.     index : number,  
  4.     name : string,  
  5.     size : number,  
  6.     type : string,  
  7.     creationdate : Date,  
  8.     modificationdate : Date,  
  9.     filestatus : number,  
  10. }  

下面是享器哈班其础件事是架考发求关通互面待需了file对象中的每个属性的简单是能览调不页新代些事几求事都时学下是事功过说明:

属性名 类型 说明
id string SWFUpload为队列中的文件生成的ID
index number 文件的索引值,使用getFile(index)可以获取该文件
name string 原文件名,不包含原文件目录
size number 文件的尺寸,单位:byte
type string 文件类型
creationdate Date 文件的创建时间
modificationdate Date 文件的最后修改时间
filestatus number 文件在上传队列中的状态,可以使用SWFUpload.FILE_STATUS比较值

结束语
至此,我们已经掌握了SWFUpload的基本使用方法。因为作者技术不精,ActionScript的知识基本为零,所以就不再深入分析SWFupload的代码了

本文来源于网络:查看 >
« 上一篇:jquery上传插件uploadify的使用
» 下一篇:前端UI攻城狮 你们该抛弃jQuery了
评论
点击刷新
评论
相关博文

分享“案例”中大奖

开始分享 中奖规则
分享链接:
联系方式:
2021-01-23中奖名单(每日10名)
×添加代码片段