fancyupload,一个用flash上传文件的插件。很好玩,可以接受自定义的header,来响应服务器的回复。

处理上载的服务器脚本应收到包含下列元素的 POST 请求:

multipart/form-data 的 Content-Type 元素

一个 Content-Disposition 元素,其name 属性设置为 "Filedata",filename 属性设置为原始文件的名称

文件的二进制内容

下面是一个 POST 请求示例:

Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="Filedata"; filename="example.jpg" Content-Type: application/octet-stream ... contents of example.jpg ... --AaB03x--

一、简单说明

Ajax+Flash多文件上传是一个开源的上传组件,名称是FancyUpload,其官方网址是:。这个组件仅仅是客户端的应用组件,即与任何服务器端的技术没有关系,服务器端可以采用任何后台技术(如JSP、Servlet、ASP等)。应用该组件提供给我们的最大的好处有如下几点(个人认为,呵呵):

n可以同时选择多个文件进行上传;

n以队列的形式排列要上传的文件和其相关信息(如名称、大小等)(美观^_^);

n可以设置要上传的文件个数、文件类型和文件大小(实用^_^);

n有上传进度显示(感觉这个非常直观,很方便实用);

n上传的过程中可以随时取消要上传的文件;

n平台独立性,由于使用flash和成熟的AJAX框架(mootools)可以避免对特定浏览器和服务器依赖!

n使用简单,文件体积小!(这个才是最实在的,呵呵)

n表单无须设置enctype="multipart/form-data"了(这个有点意思吧)

二、应用部署

文件夹fancyupload中的文件就是该组件所需要到的所有文件了,包括四个JS、二个图片、一个swf文件,另外还包含一个简单的测试html页面,其文件结构如下:

将整个文件夹copy到你的web应用目录即可,使用的时候其步骤和代码如下:

Ø引入JS文件在页面上依次引入mootools-release-1.11.js、Swiff.Base.js、Swiff.Uploader.js、FancyUpload.js这四个JS,具体目录请依据自己的情况进行设置!

Ø在页面上设置CSS样式(主要是文件列表和上传进度的样式)在head之间嵌入mytest.html中的css代码!

Ø在onload方法中调用如下代码:var upload = new FancyUpload(

$(“fileId”),

{

swf: 'Swiff.Uploader.swf'

}

);我们只要这一行代码就可以工作了,不过我们可以通过像设置swf一样来设置多个参数来控制我们的上传,比如是否使用队列,控制文件大小等。相关的参数意义如下:fileId就是我们页面上文件域的ID,即type为file的input元素的ID;{}这样包起来的参数就是我们的可选参数了,可参考FancyUpload.js中的说明。

Ø在页面上设置类似mytest.html中的body区域的代码即可!

来看一个文件上传的实际效果,如下图:

三、FancyUpload的参数说明

uurl文件上传的地址,如果不指定,那么将会自动取文件域所在的表单的action值来进行上传。如果表单的action也没有指定值,那么将尝试获取路径栏中的地址来进行文件上传。一般而言我们都需要指定该参数和文件域所在的表单的action两者之一!

uswf就是组件中的flash文件了,主要是用来选择文件和过滤等,基本上可以不用设置。

umultiple是否允许选择多个文件,默认是true。这个多选是指在打开的文件对话框中按住ctr键进行多文件的选中。

uqueued是否允许队列上传,默认是true。

utypes指定上传文件的类型,采用的格式是{提示信息:文件类型},如只允许媒体文件上传的例子:{“媒体文件(*.rm,*.avi)” : “*.rm; *.avi”}

ulimitSize指定限制的文件大小,单位是字节!默认是不限制,超过此值的文件将不被选中,注意即使选择后系统也没有提示,但是队列中也是没有该文件的!可以通过修改文件FancyUpload.js,在其128行的if语句中加上一个alert提示即可!

ulimitFiles限制的文件个数,默认是不限制!

ucreateReplacement一个自定义函数(参数为文件域对象),用来替换文件域,默认是被替换成为一个按钮!具体的代码可以参考FancyUpload.js中的第101到111行的代码。默认我已经将其按钮的值改成了中文的“浏览文件”。

uinstantStart表示选择文件后是否立即开始上传,默认是false!也建议不要设置为true,上传的操作我们可以交给该文件域所在表单的提交按钮,这也是自动绑定的,无须我们做任何操作。

uallowDuplicates是否允许队列中选择重复的文件,默认是false!注释中是true,而代码中是false,所以以代码中的为准。

ucontainer

flash文件的容器对象,默认是document.body,可以不用修改!

uoptionFxDuration文件添加到队列后,其高亮度到消失高亮度的时间,默认是250ms!也就是渐逝的时间长度。

uqueueList来列表显示文件队列的容器对象或其ID。

uonComplete单个文件上传成功后调用的方法,非AJAX,无回调参数。每个文件上传成功后都将调用该方法一次!

uonAllComplete所有文件上传成功后的调用方法!

四、表单文件域和参数同时上传实战

在你自己试过这个上传组件后,是不是感觉非常好用的,但同时你也或许发现了一个问题,那就是表单中的参数怎么进行上传的问题。因为该组件是采用FLASH+AJAX进行上传的,即页面是不刷新的,而且上传的过程中仅仅是上传了你选择的文件,而所有的表单非文件域参数则被忽略了。那我们如何来进行文件和参数的同步上传呢,这里有几个问题要注意的就是:

1)由于该组件是绑定了表单的submit方法,所以不能够直接在js中使用$(‘表单ID’).submit()这样的方式来进行表单上传,否则参数是传上去了而文件则没有;

2)如果没有做设置那么只要选择了文件而且触发了表单的submit事件,那么该组件就会开始上传文件,即使我们加了onsubmit方法中的return false也无效;

3)在第二条的基础上我们如何保证用户既选择了文件而且又输入了表单的所有必填参数呢?

这些问题在经过本人一天的实际摸索后,终于得到了解决,呵呵,现说明如下:

1)首先是上传前的参数检查这包括表单中的必填参数和文件的选择与否的判断。既然我们无法通过直接点击submit按钮进行提交前检查,那么我们就用一个普通的按钮,设置一个onclick事件,通过这个事件来进行参数的检查。这个即可避免选择了文件但又没有输入参数的误提交,又检查了整个数据的完整性,其代码如下:在checkSubmit方法中我们可以通过调用对象FancyUpload的fileList属性来判断用户是否选择了文件,其代码如下(假设你的FancyUpload对象的实例名称是uploader):if (uploader. fileList.length < 1) {

alert(‘请选择要上传的文件!’);

}通过判断这个属性(类型为数组)的长度来查看用户是否选择了文件,具体的个数就需要用户自己进行判断了,我这里是一个文件。

2)表单提交参数检查完整后我们就可以开始上传文件和表单参数了,这里我们的文件和表单参数是无法一起提交的,我们只能分先文件上传,上传成功后再提交我们的表单参数。第一步是文件的上传,之前也已经提过了不能够直接在JS中进行表单的submit,否则就无法上传文件了,这里我们采用一个迂回的办法,在表单中隐藏一个提交按钮,代码如下:然后我们再在checkSubmit函数的最后加上如下代码:……$(“mysubmit”).submit();……这样,我们通过一个隐藏提交按钮来触发表单的submit事件,这样我们就可以顺利的进行文件上传了。第二步,在文件上传成功后,我们再进行参数的提交,文件上传成功的触发函数我们在FancyUpload对象的onComplete上进行定义,不过对于多文件上传的就要定义在onAllComplete上了,我建议全部定义在onAllComplete上,如下:onAllComplete:function() {

$(“你的表单的Id”).submit();

}在这里我们就可以直接调用表单的submit来提交参数了,当然了你也可以采用AJAX提交,那就要看自己的需求了。

3)上传文件的路径和表单参数的绑定由于我们的文件上传和表单参数上传是分成两个部分进行上传的,这就出现了如何将两次上传的参数进行绑定的问题。而且查看官方上的评论,作者也没有给出解决方法,而且该组件只能检测错误时的状态码(00 < status < 300),对于上传成功是无法获取任何返回信息的。目前我的解决方法就是:1.文件上传成功后将路径信息存储以原始文件名为key存储在session中;2.参数进行上传时根据原始文件的名称去从session中获取上传的路径信息通过这二步基本上就可以绑定两次上传的参数了!如果有更好的方法大家也可以一起探讨。

所以通过以上三个步骤后我们就可以实现文件的无刷新上传和进度显示了!^_^另外这个分步进行上传是相对表单参数比较多的情况,如果参数比较少的话可以直接将参数附加在URL地址后面进行也是可以的,这就要靠个人的发挥了。

Good Luck!

html flash 上传插件,flash 插件上传文件 | 浩然东方相关推荐

  1. 基于JQUERY使用FLASH的AJAX上传进度条插件uploadify

    无论是做个人产品还是商业产品,一个好的用户体验必然给用户留下比较深刻的影响,文件上传功能就是必不可少的一个用户体验. 比如现在一个使用场景: 一个电子商城,用户每次都要提交表单信息,每一次提交表单信息 ...

  2. 批量上传插件(flash,html5,jquery)

    1.jQuery File Upload 官网:http://blueimp.github.com/jQuery-File-Upload/ 在线示例:http://blueimp.github.com ...

  3. ubuntu20.04安装flash插件(2022年版史上最简单flash插件安装教程)

    安装flash插件 方法1 方法2 方法3 1.进入flash官方[flash下载](https://www.flash.cn/) 2.下载解压 3.打开控制台进入解压文件的目录 4.依次执行两条语句 ...

  4. 网站开发常用jQuery插件总结(15)上传插件blueimp

    在介绍这个插件之前,先吐槽一下.这个插件功能很强大.带有的功能有:上传(单个文件或批量文件),自动上传或点击按钮上传,上传前缩略图显示,判断文件格式,上传前的文件操作,上传时进度条显示等功能.如果你用 ...

  5. Jquery插件(一) webupload上传插件

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  6. swfupload 实例 php,文件上传之SWFUpload插件(代码)

    下面通过一段代码给大家演示下,主要分为1.前台文件index.html和 2.后台文件upload.php.具体代码如下所示: 1.前台文件index.html SWFUpload var swfu; ...

  7. Esp8266的Flash读写操作以及Flash上传文件

    1.Flash的读写操作 Esp8266的Flash为4M,其中1M用于存储程序,其他的空间有一部分用于系统,3M中剩下的大部分空间可以用来存放文件. #include <FS.h> St ...

  8. 【已解决】谷歌浏览器使用上传插件Uploadify的上传按钮不显示

    标题 如题,情况是使用上传插件Uploadify时,在谷歌浏览器中上传按钮不显示,但是在IE中可以正常显示,并且正常上传文件. 原因 原因就是,使用这个控件的时候是要flash的-但是我的谷歌默认设置 ...

  9. ckfinder在IE上不能使用flash上传问题的解决

    项目在IE中使用ckfinder上传文件时,会出现"因为安全原因,文件不可浏览. 请联系系统管理员并检查CKFinder配置文件."的提示,我也没认真去研究ckfinder, 因为 ...

  10. 十个非常好用的文件上传工具(插件)

    概述:下面列举了十个非常好用的文件上传工具,它们有些是针对jQuery的插件,有些是Ajax文件上传插件,还有支持多文件和大文件的批量上传工具. 根据维基百科的定义,文件上传是将本地的数据传送到远程系 ...

最新文章

  1. leetcode算法题--多边形三角剖分的最低得分★
  2. OpenGL 网格Mesh
  3. Objective-C中的@property和@synthesize用法
  4. [译]JavaScript的新功能将改变正则表达式的编写方式
  5. linux 小度 驱动_分享:bananian1508成功编译小度Wifi mt7601u驱动。
  6. Keil5在线调试汇总及基本操作教程
  7. 慕有轶:看不清的方向,你还在盲目操作,犹如飞蛾扑火!
  8. 360腾讯计算机比赛,巅峰对决 腾讯电脑管家VS360详尽评测
  9. 摄氏温度转化为华氏温度代码
  10. 坚果云android功能,坚果云是什么有什么功能_坚果云相关功能作用介绍_3DM手游
  11. Flickr网站体系结构分析
  12. Golang 原子操作与互斥锁
  13. EtherNET/IP协议基础知识(下)
  14. marshmallow——自定义类型
  15. kubelet源码分析(五)之 syncPod
  16. netbeans莫明其妙的报错
  17. 金融应用,计算酬金 Exercise06_11
  18. 在美国的电子工程师眼中的中国电子行业!
  19. 入门级:GitHub和Git超超超详细使用教程!
  20. Web开发中的常见应用

热门文章

  1. 初学者:html中的表单详解(下面附有代码)
  2. (一)数据分析——企业的贤内助(数据分析的价值)
  3. cmake导入so库_CMAKE使用链接第三方SO库
  4. creo 6.0—01:软件界面介绍,系统背景颜色修改
  5. Java面试题笔试题汇总
  6. 计算机文件一点右键就内存突增,电脑内存占用忽然升高怎么解决
  7. 京东背调一星期,范围广到可怕。网友:这特么比入党还难?
  8. 第一P2P收购中国典当联盟发力供应链金融模式
  9. u盘 安装win11 提示找不到 install.wim 文件 解决方法
  10. 编译原理五 LR(1)分析法【C语言实现】