SWFUpload 使用总结

 

 今天大概的对 SWFUpload 做了一些了解,发现该控件用起来很方便,功能也很强大 呵呵

 

SWFUpload 所用到的基本文件

<link href="./css/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/swfupload.js"></script>
<script type="text/javascript" src="js/swfupload.queue.js"></script>
<script type="text/javascript" src="js/fileprogress.js"></script>
<script type="text/javascript" src="js/handlers.js"></script>

 

swfupload.js  控件的核心对象

swfupload.queue.js  处理上传时队列的文件

fileprogress.js  进度条文件

handlers.js 上传事件文件 (该文件根据需要可以进行修改)

 

基本配置

大家可以只关心我注释的配置项

var swfu;

   window.onload = function() {
      var settings = {
         flash_url : "./js/swfupload.swf",  // flash路径 - flash8 
         flash9_url : "./js/swfupload_fp9.swf", // flash路径 - flash9 
         upload_url: "./upload.php",     // 处理上传文件
         use_query_string : false ,
         file_size_limit : "100 MB",     // 文件大小 - 但是没什么用,关键要看服务器设置的大小
         file_types : "*.*",             // 文件类型,如只支持 jpg 则 "*.jpg" 这样设置,此时你只能选择 .jpg 的文件
         file_types_description : "All Files",    
         file_upload_limit : 1,          // 文件上传个数限制,写多少即能上传多少
         file_queue_limit : 0,
         custom_settings : {
            progressTarget : "fsUploadProgress",
            cancelButtonId : "btnCancel"
         },
         file_post_name : 'Filedata' ,   // 他是 file 元素的 name 属性的值。在upload.php 用 $_FILES['Filedata'] 来处理
         debug: true,

         button_image_url: "images/TestImageNoText_65x29.png",   // 按钮图片 可以修改自己喜欢的类型
         button_width: "65",     // 图片的宽度
         button_height: "29",    // 图片的高度
         button_placeholder_id: "spanButtonPlaceHolder",
         button_text: '<span class="theFont">Hello</span>',   // 在按钮中显示的信息 比如可以把他改成 上传
         button_text_style: ".theFont { font-size: 16; }",    // 按钮的字体大小
         button_text_left_padding: 12,    
         button_text_top_padding: 3,
         swfupload_preload_handler : preLoad,
         swfupload_load_failed_handler : loadFailed,
         file_queued_handler : fileQueued,
         file_queue_error_handler : fileQueueError,
         file_dialog_complete_handler : fileDialogComplete,
         upload_start_handler : uploadStart,
         upload_progress_handler : uploadProgress,
         upload_error_handler : uploadError,
         upload_success_handler : uploadSuccess,        // 这里比较重要,他是文件上传接受后激活的函数名 uploadSuccess 下面有说明
         upload_complete_handler : uploadComplete,
         queue_complete_handler : queueComplete	// Queue plugin event
      };

      swfu = new SWFUpload(settings);
   };

 

相对的html代码为

<div id="header">
	<h1 id="logo"><a href="../">SWFUpload</a></h1>
	<div id="version">v2.5.0</div>
</div>

<div id="content">
	<h2>Simple Demo</h2>
	<form id="form1" action="upload.php" method="post" enctype="multipart/form-data">
		<p>This page demonstrates a simple usage of SWFUpload.  It uses the Queue Plugin to simplify uploading or cancelling all queued files.</p>

			<div class="fieldset flash" id="fsUploadProgress">
			<span class="legend">Upload Queue</span>
			</div>
		<div id="divStatus">0 Files Uploaded</div>
			<div>
				<span id="spanButtonPlaceHolder"></span>
				<input id="btnCancel" type="button" value="Cancel All Uploads" οnclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
			</div>

	</form>
</div>


html代码不用做说明,主要是 swfupload 上传之后我们需要做一些小小的修改。

当点击 默认的选择图片按钮 Hello 之后会弹出选择选件的选择框(flash弄出来的),swfupload 默认情况下 一旦选择了文件,他马上会将该附件提交到

upload.php (在上述 upload_url 中设置的)。而 upload.php 会将文件直接上传到我们的服务器。

 

问题是表单数据无法和附件同时上传给 upload.php 而upload.php 通常只对附近进行处理。

 

在这个时候我们可以对 uploadSuccess 方法做处理 打开该方法来看一眼 (他在 handlers.js内)

function uploadSuccess(file, serverData) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setComplete();
		progress.setStatus("Complete.");
		progress.toggleCancel(false);

	} catch (ex) {
		this.debug(ex);
	}
}


这段代码只对异常做处理,而该方法是在 文件上传成功之后被激活的事件处理函数。其中有2个参数 我们只关心第一个参数 file

file 可以接受在 upload.php 中所输出的字符串(类似 ajax 异步请求之中的  xmlHttp.responseText)

也就是说 我们可以在 upload.php 中 当文件上传完毕之后 将所上传的文件名输出一下。

然后在 uploadSuccess 函数中 将 file 所得到的 文件名 赋值给 表单中的某个隐藏元素中,之后提交该表单的时候可以正确的将所上传的文件名保存到数据库!

 

但是还有一个问题,SWFUpload 一旦选择要上传的文件会立刻上传该文件,导致可能会残留垃圾文件,比如文件点错了。

 

采取的措施

设置 swfupload 上传的文件 存放在一个临时目录中,表单被提交的时候通过获取在临时目录中刚被上传的文件(因为之前我们将上传的文件名通过 uploadSuccess 函数赋值给表单元素的某个隐藏元素里) 然后将临时目录的文件 通过 rename 或者 copy 等方式 将他移动到真正的附件目录中。

 

那么 临时目录中的垃圾文件如何处理呢? 第一个方案是在访问发布页面的时候第一个做的动作就是删除 保存 swfupload 所上传的临时目录内的所有文件

或者增加一个小功能,即清楚临时目录内残留的文件的模块 定期删除临时目录内的垃圾文件!

 

 


SWFUpload控件使用 简介 SWFUpload是一个客户端文件上传工具,主要特点是: 能够完成多文件。 实现无刷新页面上传。 随时空中上传进度。 可以与其他库进行兼容。 支持Flash9及以上版本。 使用SWFUpload进行上传的页面如下: 使用方法 使用SWFUpload需要一些Js和DOM知识。 SWFUpload由4部分组成: 用于进行初始化和设置的 Js文件 一个Js库:SWFUpload.js Flash控件: swfupload.swf JavaScript事件处理程序 下面分别介绍这4个部分 初始化和设置 初始化通常在window.onload事件中进行,通过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", file_size_limit:"20 MB" }); }; 复制代码 方法二: 复制代码 var swfu; window.onload = function () { var settings_object={ upload_url:"http://www.swfupload.org/upload.php", flash_url:"http://www.swfupload.org/swfupload.swf", file_size_limit:"20 MB" }); swfu=new SWFUpload(settings_object); }; 复制代码 JavaScript库 swfupload.js文件必须在网页中被引用 <script type="text/javascript" src="swfupload/swfupload.js"></script> Flash控件 该控件必须在初始化时被动态加载。 事件处理程序 开发人员必须创建一个JavaScript函数处理SWFUpload事件。 完整示例 1. 首先,将所有的文件放到项目当中,如图 2. 在网页文件中,引入所有需要的文件,如下 <script type="text/javascript" src="swfupload/swfupload.js"></script> <script type="text/javascript" src="js/swfupload.queue.js"></script> <script type="text/javascript" src="js/fileprogress.js"></script> <script type="text/javascript" src="js/handlers.js"></script> 3. 编写脚本,对SWFUpload进行初始化设置,设置一些基本的参数。 4. 完成上传部分的html 5. 在upload.aspx.cs中对上传的文件进行处理 这样,就完成了使用SWFUpload控件的所有步骤。 备注 除了最基本的功能以外,本控件还有很多灵活的功能让开发人员自行使用。其中比较常用到的是handlers.js文件中定义的大量的上传过程的事件,例如 fileDialogComplete(numFilesSelected, numFilesQueued) uploadStart(file) uploadProgress(file, bytesLoaded, bytesTotal) uploadSuccess(file, serverData) uploadComplete(file) uploadError(file, errorCode, message) fileDialogStart() 等等 这些事件开发人员都可以根据自己的需要进行修改,使用起来非常方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值