SWFUpload 使用说明,附代码

红薯 发布于 2010/03/12 10:49
阅读 8K+
收藏 12

假设有一个前台页面upload.asp,一个后台接收文件的页面save.asp,还有su的核心文件swfupload.js,辅助处理脚本 handlers.js。

1, 这两个js,网上的源码里就有,核心js不用改. handlers可以直接用,也可以自己写,看各人本事了. 核心js里,主要是看SWFUpload.prototype.initSettings 初始化设置,很多参数该怎么写,可以参考它.
2, 要在前台页面里调用这两个js,然后初始化swfu对象。

 

<script type="text/javascript">
var swfu;
window.onload = function () {
swfu = new SWFUpload({
// Backend Settings
upload_url: "upload.asp", // Relative to the SWF file 就是这个地方误导了我
file_post_name: "Filedata", // 文件对象的名称,默认Filedata,可以自己改.后台接收就靠它识别
post_params: {"SESSID" : "<%=session.SessionID%>"}, // 附加参数,版本2新功能
// File Upload Settings
file_size_limit : "204", // 单位kb, 限制文件大小
file_types : "*.jpg", //允许的文件类型
file_types_description : "JPG Images", //对话框里的文件类型
file_upload_limit : "0",
// Event Handler Settings - these functions as defined in Handlers.js
// The handlers are not part of SWFUpload but are part of my website and control how
// my website reacts to the SWFUpload events.
// 事件处理,可以自己在handlers.js里面扩充,极大的方便了开发者
// 就是要在handlers里面定义如下的function,当然function里面可以什么也不干,或者用源代码自带的也行
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
// Flash Settings
flash_url : "js/swfupload_f9.swf", // Relative to this file 注意是f8还是f9
custom_settings : {
upload_target : "divFileProgressContainer"
},
// Debug Settings 是否打开调试信息,默认false
debug: true
});
}
</script> 

下面是表单的写法,无需input type=file的写法

<form>
<button id="btnBrowse" type="button" style="padding: 5px;" onclick="swfu.selectFiles(); this.blur();"><img src="image/page_white_add.png" style="padding-right: 3px; vertical-align: bottom;">Select Images <span style="font-size: 7pt;">(2 MB Max)</span></button>
</form>

3, 后台save.asp.
其实如果你做过普通的文件上传,这里就很简单,不管是jsp,asp,php,基本原理都一样. 前台swf得到文件后,还是用post方式提交给后台,文件对象默认名为Filedata. 比如用asp的无组件文件上传的处理写法如下

<!--#include FILE="upload_5xsoft.inc"-->
<%
set upload=new upload_5xsoft
for each formName in upload.objFile
set file=upload.file("Filedata")
file.saveAs Server.mappath(file.FileName)
set file=nothing
next
set upload=nothing
response.write "ok"
%>

java里怎么处理呢? 其实也已有,比如用struts,在actionform里有一个名为Filedata的FileItem对象即可.
php 和aspx就不讲了,官方源文件就是php的例子,也有aspx的例子.

4, 返回结果如何显示?
比如上面第三步返回一个结 果"ok". 在handlers里写上

function uploadSuccess(fileObj, server_data) {
try {
document.write( server_data);
} catch (ex) { this.debug(ex); }
}

就这样简单.只要知道原理,你可以写出更复杂的效果.官方源代码提供了根据上传图片生成缩略图并马上显示的例子.

 

 

加载中
0
十七亮
十七亮

在actionform里有一个名为Filedata的FileItem对象即可. 这个什么意思?直接提交到某个action不可以吗

?

0
Appcrashes
简单同学
简单同学
Fatal error: Call to undefined method ProjectAction::upload() in /opt/webroot/jxva/index.php on line 34 这是页面出现的错误信息.
简单同学
简单同学
这个我用谷歌浏览器怎么打不开?
0
BossKiller
BossKiller

按照官网的例子来做,会得到莫名其妙的结果。要是真要整合到项目里去,得仔细看看里面的代码,大刀阔斧地改一下,之后就好用了。

0
BossKiller
BossKiller

3楼提供的也很好用啊。

Jxva兄,我觉得您的Popup项目也很不错,要是可以加一个参数,让Popup窗移动时判断父窗口边界,避免ScrollBar出现就更好了。

0
无垠
无垠

学习学习

0
王锐
王锐
学习学习,正在寻找这方面的资料呢。
0
konylee
konylee
SWFUpload.swf(V2.2.0版本放弃了对flash 8的支持)
0
东向利
东向利

引用来自“十七亮”的答案

在actionform里有一个名为Filedata的FileItem对象即可. 这个什么意思?直接提交到某个action不可以吗

?

那个是指定File对象的名称,在处理的时候引用。作用同input:name,如下

<input type="file" name="${Filedata}" />

这样,你在处理程序中就可以引用这个对象了。

返回顶部
顶部