应用部署
文件夹fancyupload中的文件就是该组件所需要到的所有文件了,包括四个JS、二个图片、一个swf文件,另外还包含一个简单的测试html页面
引入JS文件
在页面上依次引入mootools-release-1.11.js、Swiff.Base.js、Swiff.Uploader.js、FancyUpload.js这四个JS,具体目录请依据自己的情况进行设置!
在页面上设置CSS样式(主要是文件列表和上传进度的样式)
在onload方法中调用如下代码:
var upload = new FancyUpload(
$(“fileId”),
{
swf: 'Swiff.Uploader.swf'
}
);
相关的参数意义如下:
fileId 就是我们页面上文件域的ID,即type为file的input元素的ID;
{} 这样包起来的参数就是我们的可选参数了,可参考FancyUpload.js中的说明。
FancyUpload的参数说明
url
文件上传的地址,如果不指定,那么将会自动取文件域所在的表单的action值来进行上传。如果表单的action也没有指定值,那么将尝试获取路径栏中的地址来进行文件上传。一般而言我们都需要指定该参数和文件域所在的表单的action两者之一!
swf
就是组件中的flash文件了,主要是用来选择文件和过滤等,基本上可以不用设置。
multiple
是否允许选择多个文件,默认是true。这个多选是指在打开的文件对话框中按住ctr键进行多文件的选中。
queued
是否允许队列上传,默认是true。
types
指定上传文件的类型,采用的格式是 {提示信息:文件类型},如只允许媒体文件上传的例子:{“媒体文件(*.rm,*.avi)” : “*.rm; *.avi”}
limitSize
指定限制的文件大小,单位是字节!默认是不限制,超过此值的文件将不被选中,注意即使选择后系统也没有提示,但是队列中也是没有该文件的!可以通过修改文件FancyUpload.js,在其128行的if语句中加上一个alert提示即可!
limitFiles
限制的文件个数,默认是不限制!
createReplacement
一个自定义函数(参数为文件域对象),用来替换文件域,默认是被替换成为一个按钮!具体的代码可以参考FancyUpload.js中的第101到111行的代码。默认我已经将其按钮的值改成了中文的“浏览文件”。
instantStart
表示选择文件后是否立即开始上传,默认是false!也建议不要设置为true,上传的操作我们可以交给该文件域所在表单的提交按钮,这也是自动绑定的,无须我们做任何操作。
allowDuplicates
是否允许队列中选择重复的文件,默认是false!注释中是true,而代码中是false,所以以代码中的为准。
container
flash文件的容器对象,默认是document.body,可以不用修改!
optionFxDuration
文件添加到队列后,其高亮度到消失高亮度的时间,默认是250ms!也就是渐逝的时间长度。
queueList
来列表显示文件队列的容器对象或其ID。
onComplete
单个文件上传成功后调用的方法,非AJAX,无回调参数。每个文件上传成功后都将调用该方法一次!
onAllComplete
所有文件上传成功后的调用方法!
表单文件域和参数同时上传
在你自己试过这个上传组件后,是不是感觉非常好用的,但同时你也或许发现了一个问题,那就是表单中的参数怎么进行上传的问题。因为该组件是采用FLASH+AJAX进行上传的,即页面是不刷新的,而且上传的过程中仅仅是上传了你选择的文件,而所有的表单非文件域参数则被忽略了。那我们如何来进行文件和参数的同步上传呢,这里有几个问题要注意的就是:
1)由于该组件是绑定了表单的submit方法,所以不能够直接在js中使用$(‘表单ID’).submit()这样的方式来进行表单上传,否则参数是传上去了而文件则没有;
2)如果没有做设置那么只要选择了文件而且触发了表单的submit事件,那么该组件就会开始上传文件,即使我们加了onsubmit方法中的return false也无效;
3)在第二条的基础上我们如何保证用户既选择了文件而且又输入了表单的所有必填参数呢?
说明如下:
1) 首先是上传前的参数检查
这包括表单中的必填参数和文件的选择与否的判断。既然我们无法通过直接点击submit按钮进行提交前检查,那么我们就用一个普通的按钮,设置一个onclick事件,通过这个事件来进行参数的检查。这个即可避免选择了文件但又没有输入参数的误提交,又检查了整个数据的完整性,其代码如下:
<input type=”button” value=”提交” onclikc=”checkSubmit()” />
在checkSubmit方法中我们可以通过调用对象FancyUpload的fileList属性来判断用户是否选择了文件,其代码如下(假设你的FancyUpload对象的实例名称是uploader):
if (uploader. fileList.length < 1) {
alert(‘请选择要上传的文件!’);
}
通过判断这个属性(类型为数组)的长度来查看用户是否选择了文件,具体的个数就需要用户自己进行判断了,我这里是一个文件。
2) 表单提交
参数检查完整后我们就可以开始上传文件和表单参数了,这里我们的文件和表单参数是无法一起提交的,我们只能分先文件上传,上传成功后再提交我们的表单参数。
第一步是文件的上传,之前也已经提过了不能够直接在JS中进行表单的submit,否则就无法上传文件了,这里我们采用一个迂回的办法,在表单中隐藏一个提交按钮,代码如下:
<input type=”submit” id=”mysubmit” style=”display:none” />
然后我们再在checkSubmit函数的最后加上如下代码:
……
$(“mysubmit”).submit();
……
这样,我们通过一个隐藏提交按钮来触发表单的submit事件,这样我们就可以顺利的进行文件上传了。
第二步,在文件上传成功后,我们再进行参数的提交,文件上传成功的触发函数我们在FancyUpload对象的onComplete上进行定义,不过对于多文件上传的就要定义在onAllComplete上了,我建议全部定义在onAllComplete上,如下:
onAllComplete:function() {
$(“你的表单的Id”).submit();
}
在这里我们就可以直接调用表单的submit来提交参数了,当然了你也可以采用AJAX提交,那就要看自己的需求了。
3) 上传文件的路径和表单参数的绑定
由于我们的文件上传和表单参数上传是分成两个部分进行上传的,这就出现了如何将两次上传的参数进行绑定的问题。而且查看官方上的评论,作者也没有给出解决方法,而且该组件只能检测错误时的状态码(00 < status < 300),对于上传成功是无法获取任何返回信息的。目前我的解决方法就是:
1. 文件上传成功后将路径信息存储以原始文件名为key存储在session中;
2. 参数进行上传时根据原始文件的名称去从session中获取上传的路径信息
分享到:
相关推荐
Ajax+Flash多文件上传是一个开源的上传组件,名称是FancyUpload,其官方网址是:http://digitarald.de/project/fancyupload/。这个组件仅仅是客户端的应用组件,即与任何服务器端的技术没有关系,服务器端可以采用...
- 文件预览:支持上传前预览文件,特别是图片和文档,确保上传的文件符合预期。 - 大文件处理:对大文件的上传处理得当,不会消耗过多系统资源。 - 错误处理:有完善的错误处理机制,如网络中断、文件类型限制等...
它的工作原理是通过Flash作为浏览器与服务器之间的桥梁,绕过了一些浏览器对JavaScript直接上传大文件或多个文件的限制,尤其适用于那些需要大量上传图片、文档或其他文件的网站。 在【描述】中提到,fancyupload的...
这个FancyUpload示例能在Tomcat环境下正常运行,说明它遵循了Java Web的部署规范,如WAR文件打包和web.xml配置。 4. **文件上传流程**:在FancyUpload中,文件上传通常涉及以下步骤:用户选择文件,FancyUpload通过...
9. **API与文档**:FancyUpload提供了详细的API文档和示例代码,帮助开发者快速上手,降低了学习和使用的难度。 通过以上分析,我们可以看出FancyUpload 3.0是一个功能强大且易用的文件上传解决方案。无论是在网页...
这确保了用户只能上传特定类型的文件,例如图片、文档或视频,从而防止了安全风险和存储空间的滥用。在Java后端,你可以通过检查文件的MIME类型或者扩展名来实现这个功能。 集成SwfUpload 或 FancyUpload 到Java...
FancyUpload是个很不错的上传插件。之前FancyUpload2.0版本的在IE下已不能用了。在网上FancyUpload 3.0 结合Asp.net 使用的例子几乎找不到,所以就做了一个FancyUpload 3.0 For Asp.net 的Demo,方便大家学习或使用...
3. 初始化FancyUpload:在JavaScript中调用FancyUpload的初始化方法,配置上传参数和回调函数。 4. 调整样式:根据需要对FancyUpload的外观进行定制,例如更改按钮样式或进度条颜色。 5. 处理上传结果:在回调函数中...
在IT行业中,Ajax(Asynchronous JavaScript and XML)和FancyUpload是两种常见的文件上传技术,它们都致力于提供更优秀的用户体验,尤其是对于Web应用程序中的文件上传功能。Ajax上传允许用户在不刷新整个页面的...
这个文件名可能包含源码、资源文件、文档、示例程序等,帮助开发者了解和使用FancyUpload组件。 详细知识点: 1. **Delphi 编程**:Delphi 采用直观的可视化设计界面,支持事件驱动编程模型,使得开发者能快速构建...
NULL 博文链接:https://struts.iteye.com/blog/281691
digitarald-fancyupload, Swiff满足Ajax强大而优雅的上传( MooTools插件) 功能 FancyUpload - Swiff满足 Ajax以英镑为代价的Swiff 满足了强大而优雅的上传功能的收费。 FancyUpload是一个文件输入替换,它具有一个...
在ASP.NET开发环境中,FancyUpload是一个非常流行的前端文件上传组件,它提供了用户友好的界面和灵活的上传功能。FancyUpload通常与Flash技术结合,允许用户批量上传文件,同时支持进度条显示,大大提升了用户体验。...
在本资源中,"digitarald-digitarald-fancyupload-af23792"是一个开源项目,可能是一个古老的版本,由用户"digitarald"开发的FancyUpload工具。FancyUpload是一款流行的JavaScript上传组件,它以优雅的界面和无刷新...
3. "FancyUpload2.js" - 这是Fancyupload的核心JavaScript文件,包含了插件的主要逻辑。 4. "Swiff.Uploader.js" - 这可能是一个用于与Flash交互的JavaScript模块,因为Flash在上传大文件时曾经是常见的选择。 5. ...
FancyUpload是一款基于MooTools JavaScript库的上传插件,它为用户提供了一种优雅且可定制的方式来处理文件上传。在本文中,我们将深入探讨FancyUpload的特性、配置选项、自定义样式以及如何在项目中集成它。 1. **...
1. FancyUpload (演示地址) FancyUpload是一个采用Flash与Ajax(MooTools)技术实现包含上传进度条的多文件上传组件,类似于SWFUpload。 2. SwfUploadPanel (演示地址) SwfUploadPanel是一个结合SwfUpload v2.0.2与...
OneupUploaderBundle 用于Symfony的OneupUploaderBundle添加了对使用以下JavaScript库之一或来处理文件上传...文档的入口点可以在文件Resources/docs/index.md 升级说明 3.0.0版现在支持Symfony 5(对@ ,@ ,@ ,@ 和
在现代Web应用中,用户经常需要上传多个文件,如图片、文档或音频文件。传统的文件上传方式往往只能处理单个文件,并且会刷新整个页面,影响用户体验。为了解决这个问题,"多文件上传AJAX代码"应运而生。这是一种...