下载该工具,其中有用的为.swf格式的文件和几个js文件,就是文件的引入书序也是需要按照文档规定的写。
SWFUpload JavaScript对象
构造函数
全局变量和常量
instances
movieCount
QUEUE_ERROR
UPLOAD_ERROR
FILE_STATUS
BUTTON_ACTION
CURSOR
BUTTON_WINDOW_MODE
customSettings
movieName
addSetting (不建议使用)
getSetting (不建议使用)
retrieveSetting (在v2.1.0版本中被移除)
destroy (在v2.1.0版本中添加)
displayDebugInfo
selectFile
selectFiles
startUpload
cancelUpload
stopUpload
getStats
setStats
getFile
addPostParam
removePostParam
addFileParam
removeFileParam
setUploadURL
setPostParams
setFileTypes
setFileSizeLimit
setFileUploadLimit
setFileQueueLimit
setFilePostName
setUseQueryString
setDebugEnabled
setButtonImageURL (在v2.2.0版本中添加)
setButtonDimensions (在v2.2.0版本中添加)
setButtonText (在v2.2.0版本中添加)
setButtonTextStyle (在v2.2.0版本中添加)
setButtonTextPadding (在v2.2.0版本中添加)
setButtonAction (在v2.2.0版本中添加)
setButtonCursor (在v2.2.0版本中添加)
事件
flashReady
swfUploadLoaded
fileDialogStart
fileQueued
fileQueueError
fileDialogComplete
uploadStart
uploadProgress
uploadError
uploadSuccess
uploadComplete
debug
SWFUpload实用对象
Settings Object(设置对象)
设置说明
File Object(文件对象)
Stats Object(统计对象)
SWFUpload插件
SWFUpload是一个由 Vinterwebb.se原创开发的客户端文件上传工具。它采用Flash和JavaScript结合的方式来提供文件上传功能,而浏览器仅仅只需提供<input type="file" />标签。
SWFUpload的主要功能如下:
上传过程中的事件控制。
类使用了名称空间,稳定兼容其他JavaScript库(例如jQuery,Prototype等。)。
由于设计理念上见解和宗旨的差异,SWFUpload和其它基于Flash的上传工具不一样。SWFUpload将UI的表现交给浏览器,以给开发者尽可能多的发挥余地。开发者可以使用XHTML,CSS和JavaScript来装饰上传UI以满足他们站点的需要。上传状态的更新是通过一系列简单的JavaScript事件完成的。开发者可以在文件上传过程中使用这些事件来更新页面。
HTML上传
标准的HTML上传提供一个输入框和一个供用户选择单个文件的按钮。文件使用表单提交,整个文件必须在下一个页面显示之前上传完成,在上传之前不能对文件进行校验(如文件大小限制和是否有效的扩展名等)。上传时提供给用户的反馈信息非常少。
SWFUpload
SWFUpload使用一个Flash电影来处理文件选择和上传。Flash电影提供一个自定义按钮,该按钮可以激活Flash的高级文件选择窗口。该文件选择窗口允许用户选择单个或多个文件,文件类型可以被限制,如此一来,用户就只能选择被允许的文件 (如*.jpg;*.gif)。
上传完成的文件将脱离当前页面和表单并且被提交。每个文件都是单独被上传的,以此来使服务端处理上传的脚本不需要太复杂。由于Flash提供上传功能,因此页面无须被提交或重载。SWFUpload的使用方式更像一个AJAX应用而非标准的HTML表单,页面中的表单处理是和文件上传分开的。
快速指南
SWFUpload由以下4个方面组成:
初始化和设置(JavaScript)
JavaScript库: SWFUpload.js
Flash控制: swfupload.swf
事件处理(JavaScript)
在部署SWFUpload时,大多数问题都是由错误设置、糟糕的事件处理、Flash/浏览器bug或者服务器配置引起的。
初始化和设置
Example:使用一个对象原型来初始化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"
});
};
Example:使用一个存储在变量中的设置对象来初始化SWFUpload
var swfu;
window.onload = function () {
var settings_object = {
upload_url : "http://www.swfupload.org/upload.PHP",
file_size_limit : "20 MB"
};
swfu = new SWFUpload(settings_object);
};
JavaScript库
一旦SWFUpload对象被创建,开发者就可以访问一些函数来控制SWFUpload。
<script type="text/javascript" src=\'#\'" //www.swfupload.org/swfupload.js"></script>
Example:使用定义的设置初始化SWFUpload。
var swfu = new SWFUpload({
upload_url : "http://www.swfupload.org/upload.PHP",
flash_url : "http://www.swfupload.org/swfupload_f9.swf",
button_placeholder_id : "spanSWFUploadButton"
});
Flash控制器
SWFUpload JavaScript库动态地载入Flash控制器(swfupload.swf)。
Flash控制文件的路径必须在初始化时通过SWFUpload设置对象给出。
事件处理器
通过处理SWFUpload事件,开发者可以根据上传过程、错误信息和上传完成提供反馈信息。开发者不应该重写存储在SWFUpload.prototype中的函数,而是应该创建你自己的一系列函数并且在设置对象中向它们传递参数。
Example:SWFUpload事件处理器和初始化。
var myCustomUploadStartEventHandler = function (file) {
var continue_with_upload;
if (file.name === "the sky is blue") {
continue_with_upload = true;
} else {
continue_with_upload = false;
}
return continue_with_upload;
};
var myCustomUploadSuccessEventHandler = function (file,server_data,receivedResponse) {
alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data);
};
//创建SWFUpload Object
var swfu = new SWFUpload({
upload_url : "http://www.swfupload.org/upload.PHP",
file_size_limit : "200 MB",
upload_start_handler : myCustomUploadStartEventHandler,
upload_success_handler : myCustomUploadSuccessEventHandler
});
SWFUpload JavaScript对象
构造函数
SWFUpload(settings object)
返回值: 一个SWFUpload实例
var swfupload_instance = new SWFUpload(settings_object);
全局变量和常量
SWFUpload.instances
SWFUpload.instances是一个含有“对页面中所载入的每个SWFUpload实例的引用”的对象 。Flash播放器依赖这个对象来调用相应的事件处理器。SWFUpload.instances按照movieName属性进行索引。
SWFUpload.movieCount
SWFUpload.QUEUE_ERROR
FILE_EXCEEDS_SIZE_LIMIT - 说明被选择的文件大小超出了file_size_limit的限制。
SWFUpload.UPLOAD_ERROR
MISSING_UPLOAD_URL - upload_url没有被设置。
FILE_VALIDATION_Failed - uploadStart事件返回了false。
SWFUpload.FILE_STATUS
SWFUpload.BUTTON_ACTION
SWFUpload.CURSOR
ARROW - 光标将呈现为一个箭头。
HAND - 光标将呈现为一个手指/手掌。
SWFUpload.WINDOW_MODE
SWFUpload.WINDOW_MODE是一个含有Flash电影的wmode参数的单一对象。 它用来告知浏览器如何呈现Flash电影。
某些WINDOW_MODE/WMODE设置在一些浏览器中可能会产生问题。查看兼容性和bug。
OPAQUE将允许页面中的其他元素覆盖Flash按钮。
TRANSPARENT设置按钮背景呈现为透明的,这样位于按钮下方的HTML元素就可以透过按钮被显示出来。
customSettings (读写)
customSettings属性是一个空的JavaScript对象,它可以被用来存储与SWFUpload实例相关的数据。customSettings对象的内容可以通过设置custom_settings来初始化。
使用举例:
//使用一些自定义设置来初始化SWFUpload
var swfu = new SWFUpload({
custom_settings : {
custom_setting_1 : "custom_setting_value_1",
custom_setting_2 : "custom_setting_value_2",
custom_setting_n : "custom_setting_value_n",
}
});
//使用一个全新的对象来重写customSettings
swfu.customSettings = {
custom_setting_A : "custom_setting_value_A",
custom_setting_B : "custom_setting_value_B"
};
存储在customSettings对象中的值可以在事件处理器中被访问到:
function uploadSuccess(file,serverData,receivedResponse) {
if (this.customSettings.custom_setting_A === true) {
alert("Checked the custom setting!");
}
}
movieName
包含SWFUpload实例所对应电影的唯一名称。这个值将被传递给Flash来帮助与JavaScript进行通信。除此之外,它还用来索引SWFUpload.instances数组中的实例。你不应该修改movieName的值。
object addSetting(setting_name,value,default_value)
已过期 addSetting函数用来进行自定义设置 。如果value未定义,那么将使用默认值。此函数在SWFUpload初始化时被调用,使用addSetting方法更新设置不会改变Flash控制器的原有设置。
addSetting返回存储在设置对象中的值 。
object getSetting(setting_name)
object retrieveSetting(setting_value,default_value)
在v2.1.0版本中被移除 retrieveSetting函数和 addSetting函数很相似,但是retrieveSetting函数不会修改内部设置对象。 retrieveSetting将返回设置项的值,如果该设置项没有定义,那么它将返回默认值。
bool destroy()
在v2.1.0版本中添加
void displayDebugInfo()
void selectFile()
已过期。与Flash Player 10不兼容。
void selectFiles()
已过期。与Flash Player 10不兼容。
void startUpload(file_id)
void cancelUpload(file_id,trigger_error_event)
trigger_error_event参数是可选的,如果该参数设置为false,那么uploadError事件将不会触发。
void stopUpload()
object getStats()
void setStats(stats_object)
object getFile(file_id,index)
void addPostParam(name,value)
void removePostParam(name)
post_params设置中的name/value键值对也将被移除。
bool addFileParam(file_id,name,value)
bool removeFileParam(file_id,name)
如果name/value键值对没有被找到,将返回 'false'。
void setUploadURL(url)
动态地修改upload_url设置。
void setFileTypes(types,description)
动态地更新file_types和file_types_description的设置,2个参数都是必须的。
void setFileSizeLimit(file_size_limit)
使用举例: 2147483648 B,2097152,2097152KB,2048 MB,2 GB
void setFileUploadLimit(file_upload_limit)
动态地修改file_upload_limit设置。如果设置为0,这说明“无限制”。
void setFileQueueLimit(file_queue_limit)
动态地修改file_queue_limit设置。如果设置为0,这说明“无限制”。
void setFilePostName(file_post_name)
动态地修改file_post_name设置。Linux系统中,Flash播放器将忽略该设置。
void setUseQueryString(use_query_string)
动态地修改use_query_string设置。当设置为true,将强制SWFUpload通过网址传值来发送POST参数,而不是通过POST数组。use_query_string参数必须是一个布尔值。
void setDebugEnabled(debug_enabled)
void setButtonImageURL(url)
动态改变Flash按钮的背景图。图片的路径必须相对于swfupload.swf文件,或者以斜杠开始的绝对路径(如/),或者一个完整的URL地址(如http://www.swfupload.org/buttonImage.png)。任何Flash支持的图像格式都可以被载入,最常见的图片格式为jpg,gif和png。
void setButtonDimensions(width,height)
动态改变Flash按钮的宽和高,宽、高值必须是数字型,并且不能含有任何单位。height参数的值应该是整个按钮背景图高度的1/4,这样按钮浮标才可以正确显示各个状态。
void setButtonText(text)
void setButtonTextStyle(css_style_text)
设置应用于Flash按钮文本的CSS样式,CSS的格式必须遵循Flash播放器文档中的要求。(Adobe文档)
void setButtonTextPadding(left,top)
设置Flash按钮文本的顶边距和左边距,参数值可以是负数。
当参数设置为'true'时,将把Flash按钮的状态设置为禁用,任何点击都无效。
void setButtonAction(buttonAction)
设置当Flash按钮被点击时所进行的动作,可选的动作可以从BUTTON_ACTION中获得。
void setButtonCursor(buttonCursor)
设置当鼠标划过Flash按钮时的光标形态。可选的光标形态可以从CURSOR中获得。
事件
译者注:文档中给出的事件参数只是对其的描述,而不是既定的参数形式。在你的代码中可以自定义,如:fileQueued(file object),在你的代码中可以是fileQueued(fobj)或者fileQueued(aaa))。
SWFUpload在操作中可以触发多个事件。这些事件可以被开发者用来更新UI,改变SWFUpload的行为或者报告错误。
uploadStart
flashReady()
swfUploadLoaded()
fileDialogStart()
fileQueued(file object)
fileQueueError(file object,error code,message)
fileDialogComplete(number of files selected,number of files queued,total number of files in the queue)
fileDialogComplete事件在文件选择对话窗口关闭并且所有被选择文件都经过处理(校验)后 触发。'number of files queued'表示从文件选择窗口中选择的文件数量(区分实际进入上传队列中的文件数量,译者注:从之前章节的介绍中,我们得知并不是所有被选择的文件都会进入上传队列,比如你选择了5个,但是实际被上传的只有4个。但是根据译者测试,最后两个参数的值是一样的,读者如果发现了区别请告知)。
uploadStart(file object)
uploadProgress(file object,bytes complete,total bytes)
uploadError(file object,message)
当上传被中断或者没有成功完成时,就会触发uploadError事件,error code参数表示发生错误的类型。根据error code参数的值你可以得出SWFUpload.UPLOAD_ERROR中的一个常量(译者注:表示具体错误)。
uploadSuccess(file object,server data,received response)
由于Flash播放器的一些bug,可能无法捕获服务器的回应,uploadSuccess事件也不会触发。在这种情况下,将会检查assume_success_timeout的设置,查看是否过了触发uploadSuccess事件的时间,这时捕获的服务器回应值应该是false。
http_success设置,允许即使在状态码不是200的时候也可以触发uploadSuccess事件。这种情况下,Flash播放器无法获得任何服务器数据。
uploadComplete(file object)
debug(message)
当debug设置为'true'时,debug事件将由SWFUpload库和Flash控制器一起触发。如果debug事件没有被重载,那么SWFUpload将向控制台(一个自动被添加至页面body部分最后的文本框)记录debug信息。
SWFUpload实用对象
设置对象
Example:
{
upload_url : "http://www.swfupload.org/upload.PHP",
file_post_name : "Filedata",
post_params : {
},
use_query_string : false,
requeue_on_error : false,
http_success : [201,202],
assume_success_timeout : 0,
file_types : "*.jpg;*.gif",
file_types_description: "Web Image Files",
file_size_limit : "1024",
file_upload_limit : 10,
file_queue_limit : 2,
debug : false,
prevent_swf_caching : false,
preserve_relative_urls : false,
button_placeholder_id : "element_id",
button_image_url : "http://www.swfupload.org/button_sprite.png",
button_width : 61,
button_height : 22,
button_text : "<b>Click</b> <span class="redText">here</span>",
button_text_style : ".redText { color: #FF0000; }",
button_text_left_padding : 3,
button_text_top_padding : 2,
button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
button_disabled : false,
button_cursor : SWFUpload.CURSOR.HAND,
button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
swfupload_loaded_handler : swfupload_loaded_function,
file_dialog_start_handler : file_dialog_start_function,
file_queued_handler : file_queued_function,
file_queue_error_handler : file_queue_error_function,
file_dialog_complete_handler : file_dialog_complete_function,
upload_start_handler : upload_start_function,
upload_progress_handler : upload_progress_function,
upload_error_handler : upload_error_function,
upload_success_handler : upload_success_function,
upload_complete_handler : upload_complete_function,
debug_handler : debug_function,
custom_settings : {
custom_setting_1 : "custom_setting_value_1",
}
}
设置说明
upload_url
如果preserve_relative_urls设置为false,SWFUpload会将相对路径转换为一个绝对路径以避免不同平台的Flash播放器对URL的不同识别问题。 如果你想禁用SWFUploads对URL的转换,相对路径应该相对于swfupload.swf文件。
file_post_name
file_post_name用来设置提交文件的键名,这个名称跟文件本身的名称没有关系。默认值是'Filedata'(译者注:在上传脚本中,使用$_FILES['Filedata']来获取文件的相关信息),我们建议使用默认值以保证最好的兼容性。
post_params
post_params定义一个将随每个已上传文件一起被提交的name/value键值对,该项的值是一个单一的JavaScript对象。如何定义多个name/value键值对,在上面设置对象例子中有示范。Value可以是字符串或者数字(可以用JavaScript的typeof函数来验证其类型)。
use_query_string
use_query_string的值为true或false。此项的值告知SWFUpload是通过网址传值的形式发送post_params和文件参数(译者注:可以使用$_GET数组和$_REQUEST数组获取)还是直接通过POST(译者注:可以使用$_POST数组和$_REQUEST数组获取)发送。此设置从SWFUpload v2.1.0版本中引进。
preserve_relative_urls
requeue_on_error
requeue_on_error的值可以是true或false。当此项的值被设置为true时,任何发生uploadError错误(除了fileQueueError和FILE_CANCELLED)的文件都将返回队列的前面,而不会被丢弃。如果需要,文件可以再次被上传。要从上传队列移除文件,应该调用cancelUpload方法。
所有与上传失败相关的事件仍会被调用,所以重整上传失败的文件可能会和队列插件有冲突(或者是用来上传整个队列的自定义代码)。如果没有采取措施来取消已经上传失败的文件,自动上传下一个文件的代码将会重复上传已经失败的文件。
该设置项从SWFUpload v2.1.0版本中引进。
http_success
assume_success_timeout
在文件上传完毕后,SWFUpload等待Flash探测服务器响应的时间(单位:秒)。此项可以让你规避Flash播放器的bug,这些bug通常是由于长时间运行的服务器端脚本使Flash忽略了服务器响应或者Mac平台下的Flash播放器忽略了无内容的服务器响应而引起的。
测试表明,在上一次uploadProgress事件发生之后,Flash将会忽略那些超过30秒的服务器响应。
默认值为0,这表示禁用此特性。 SWFUpload将不停地等待Flash播放器触发uploadSuccess事件。
file_types
file_types_description
file_size_limit
file_upload_limit
定义SWFUpload一次最多可以同时上传的文件数量,此项值必须依赖于file_queue_limit的设置。一旦用户已经上传的文件数量或者上传队列中的文件数量达到了最大值,他就不能再添加文件。默认值为0,表示无限制。只有成功上传的文件,才会被计算进file_upload_limit(触发了uploadSuccess事件的上传)。setStats函数可以用来修改已成功的上传的数目。
file_queue_limit
定义上传队列中的文件最大数量。如果一个文件已经上传完成或者上传出错或者被取消上传,你可以向上传队列新增一个文件,只要不超出限制。如果file_upload_limit的值比file_queue_limit的值小,那么此设置将采用file_upload_limit的值。
flash_url
flash_width
flash_height
flash_color
(在v2.2.0版本中被移除)设置存放flash的HTML元素的背景色,默认值是'#FFFFFF'。
注意:在所有浏览器中,如果对存放flash的元素采用"skinning"1px,将不会起做用(译者注:查资料,skinning一词在IT行业有蒙皮的意思。译者不确定,所以没有直接翻译,如果有热心读者知道,请告知。)。
prevent_swf_caching
debug
此项的值为布尔型,定义是否触发debug事件。
button_placeholder_id
(从v2.2.0版本引进) 此项的值是一个将被Flash按钮替换的DOM元素的ID。此设置会重载button_placeholder,Flash按钮的样式可以使用CSS类'swfupload'来实现。
button_placeholder
(从v2.2.0版本引进) 此项的值是一个将被Flash按钮替换的DOM元素,只有当设置了button_placeholder_id时,才会起作用。Flash按钮的样式可以使用CSS类'swfupload'来实现。
button_image_url
该图像URL受preserve_relative_urls设置的影响,并且应该和upload_url的规则一样(译者注:都是用相对路径或绝对路径)。
button_width
(从v2.2.0版本引进) Flash按钮的宽度。
button_height
(从v2.2.0版本引进) Flash按钮的高度,此项的值应该是整个按钮图片高度的1/4(译者注:文档上文提到了,一个Flash按钮图片里应该包含按钮的四个状态,也可以理解为是4张单独的按钮图片拼合在一起的)。
button_text
button_text_style
button_text_top_padding
(从v2.2.0版本引进) 设置Flash按钮的文本在垂直方向上的位置,可以使用负数。
button_text_left_padding
(从v2.2.0版本引进) 设置Flash按钮的文本在水平方向上的位置,可以使用负数。
button_action
(从v2.2.0版本引进) 定义当Flash按钮被点击时所执行的动作。动作有效值可以在swfupload.js文件的BUTTON_ACTION对象源码中找到。
button_disabled
(从v2.2.0版本引进) 布尔型,设置Flash按钮是否处于禁用状态。当禁用时,按钮将不执行任何动作。
button_cursor
(从v2.2.0版本引进) 定义当鼠标划过Flash按钮时,光标呈现何种形态。
button_window_mode
(从v2.2.0版本引进) 设置Flash电影的WMODE属性。有效值可以查看SWFUpload.WINDOW_MODE常量中查看。
custom_settings(自定义设置)
var swfu = new SWFUpload({
custom_settings : {
"My Setting" : "This is my setting",
myothersetting : "This is my other setting",
integer_setting : 100,
a_dom_setting : document.getElementById("some_element_id")
}
});
var my_setting = swfu.customSettings["My Setting"]);
swfu.customSettings["My Setting"] = "This is my new setting";
swfu.customSetting.myothersetting = "another new value";
swfu.customSetting.integer_setting += 25;
swfu.customSetting["a_dom_setting"].style.visibility = "hidden";
事件处理器
File Object(文件对象)
{
}
Stats Object(统计对象)
Stats对象提供关于上传队列的信息。
stats对象包含以下属性:
{
}
除了in_progress和files_queued之外,所有这些值都可以通过setStats()方法来更新。
SWFUpload插件
Currently most of the documentation for using the plugins is contained in the plugin JavaScript file.
SWFObject
Flash Player 10: 由于Flash Player 10要求SWFUpload的swf文件表现为一个按钮,为了成功载入SWFUpload,flash电影必须是可见的。如果button_placeholder_id所对应的元素是隐藏的。(visibility设置为hidden或者display设置为none),SWFUpload将会载入失败。
Cookies
注意,插件在发送cookies时,它们是以name/values键值对的形式存在于POST或者GET数组中。在服务端,它们将无法作为cookie被访问,一些会检查会话的cookies或者授权值的框架也无法获取这些值。
Queue Handling
Speed
常见问题
Flash播放器和许多浏览器都有bug,这些bug将直接反应在SWFUpload的表现上。当我们在努力规避/修复这些bug的同时,仍然有一些是我们不能避免的。
Cancelling in Linux
Linux系统下,如果你取消上传,旧版本的Flash 9将使浏览器崩溃,较新版本的Flash 9改善了该问题。
Upload Progress in Linux
在一些版本的Linux系统中,在上传的过程中,整个浏览器将不可用。
Upload Progress in OS X
有一些报告指出,uploadProgress事件在MAC平台的Flash中不会触发。尽管还没有被确认,但是开发者应该注意此问题。
MIME Type
Maximum number of selected files
Flash播放器并不强制一次只能选择多少文件,但是,它会建立一个有长度限制的文件序列,该文件序列是由文件名和分隔符[引号][空格][引号]组成的。可以选择的文件数量,是由文件名长度、前后引号、被选择文件数量减去1再乘以3这三者的和来决定的。
Proxies
使用代理,Flash播放器可能工作不正常。它无法很好地识别代理,有时候还会崩溃。
一些反病毒软件使用代理服务器来扫描上传文件,这样会误使SWFUpload相信整个文件已经被上传了。只要上传进度达到100%,SWFUpload将迅速触发uploadProgress事件,在代理服务器将文件上传完毕之前,SWFUpload看上去就像暂停了一样。
Apache mod_security
Apache的mod_security模块,会校验发送给服务器的POST数据。Flash播放器对此模块很敏感(目前,关于这一点是否无效,还没有定论),如果服务器开启了mod_security,POST提交的上传文件将被拒绝。mod_security可以通过你的.htaccess文件禁用。
SSL
另外,由于Flash没有提供用于接受SSL证书的方法,那么从不被信任的认证机构获取的SSL证书将无效。我们已经注意到此问题,就像cookie bug一样,Windows平台上的Flash可以通过互联网浏览器来获取被信任的CA。
Authentication
Flash对HTTP身份认证的支持并不完美。最新版本的Flash对此有了改善,老版本的Flash将会使浏览器崩溃。
Prematurely terminated connections
过早地结束响应(如ASP.Net中的Response.end())有时候可能会将成功的上传报告为失败。
Filedata in Linux
Linux系统中,改变Filedata的值(file_post_name设置)将被忽略。
Cookie issue
在Windows平台中,非IE浏览器的Flash插件(FireFox,Opera,Safari等)将发送IEcookies,而不顾浏览者的使用。这破坏了许多服务端脚本的身份认证和会话控制。
如果开发者希望使用Session,那么他们应该手工传递Session和有关身份认证的cookie信息并且手工存储Session信息。
ExternalInterface bugs
当与浏览器/JavaScript通信时,Flash无法正确的转义数据。SWFUpload为了解决这个问题做了诸多努力。如果在以后的Flash/浏览器中解决此bug,那么SWFUpload就可以发送大量的转义数据。
Server Data length bugs
在MAC和Linux系统的flash中,服务器数据太长容易被损坏,数据可能会被清空,错乱,或重复。我们建议服务器返回的数据尽量精简。
Avant browser
一些使用Avant浏览器的用户可能会发现,在Flash控制器被缓存后SWFUpload无法工作。SWFUpload开发者已经反复提到了此问题,但是Avant浏览器的开发团队就像没事人一样。
当页面被重载时SWFUpload将会载入并触发swfupload_loaded事件。但是,没有任何内部回调函数被定义来处理存放Flash的DOM元素。SWFUpload v2.0.2版本中添加了检测机制,如果没有检测到回调函数,将阻止swfupload_loaded被触发。
SWFUpload v2.2.0引进了prevent_swf_caching设置,以此来解决Avant浏览器中flash被缓存而无法工作的问题。
File Dialog & Page Changing
当文件浏览窗口处于打开状态时离开或重载页面会导致浏览器崩溃(包括所有浏览器和所有操作系统,译者注:在谷歌浏览器测试没有崩溃,可能是官方文档没有更新此条目)。通常,这是由于在“一个onclick事件中调用了selectFile或selectFiles函数的”<a>标签上取消点击事件失败时造成的。
Long Running Upload Scripts
在Flash将文件上传至web服务器之后,上传脚本将被执行。这个脚本可以控制是否保存文件、创建缩略图、扫描病毒等。如果上传脚本在30秒内没有返回任何数据,Flash将断开连接并返回一个IO错误。当脚本运行是你可以通过返回字符或数据来防止该错误(如果可以)对PHP来说,即使Flash中断了连接脚本仍然会继续执行并且成功完成。在Flash断开连接后返回的任何数据都将丢失。
WMODE / BUTTON_WINDOW_MODE
这可能会对SWFObject插件产生不利影响。不会有任何SWFUpload事件触发,而且按钮背景也不会载入,直到flash控制器可见。
Memory Leaks
当JavaScript通过SWFUpload使用的内部接口类进行通信时,一些浏览器(如IE)无法释放由Flash播放器使用的内存。创建多个SWFUpload实例或者多次重载页面将会导致浏览器耗费更多的内存直到浏览器崩溃或对系统产生危害。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。