swfupload 实现批量文件上传

时间:2022-08-30 09:19:47

使用swfupload上传文件出现中文乱码现象的解决方法

<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <globalization requestEncoding="utf-8"/>
    </system.web>
</configuration>
新建一个web.config内容如上。放在你使用swfupload这个组件的程序目录。就行了

void removePostParam(name)

从设置中的post_params对象中删除name指定的属性,当文件上传的时候,删除的值对不会继续在POST中发送。

bool addFileParam(file_id, name, value)

为指定file_id的特定文件对象添加POST值对,如果添加的name属性已经存在,那么原值会被覆盖。

如果需要给所有文件对象添加POST值,那么可以使用设置中的post_params属性。

bool removeFileParam(file_id, name)

删除由addFileParam添加的POST值对.

如果POST设置中没有此属性,那么返回false。

void setUploadURL(url)

动态修改设置中的upload_url属性。

void setPostParams(param_object)

动态修改post_params,以前的属性全部被覆盖。param_object必须是一个JavaScript的基本对象,所有属性和值都必须是字符串类型。

void setFileTypes(types, description)

动态修改设置中的file_types 和 file_types_description,两个参数都是必须的。

void setFileSizeLimit(file_size_limit)

动态修改设置中的file_size_limit,此修改针对之后的文件大小过滤有效。file_size_limit参数接收一个单位,有效的单位有B、KB、MB、GB,默认单位是KB。

例如: 2147483648 B, 2097152, 2097152KB, 2048 MB, 2 GB

void setFileUploadLimit(file_upload_limit)

动态修改设置中的file_upload_limit,特殊值0表示无限制。

提醒:这里限制的是一个SWFUpload实例控制上传成功的文件总数。

void setFileQueueLimit(file_queue_limit)

动态修改设置中的file_queue_limit,特殊值0表示无限制。

提醒:这里限制的是文件上传队列中(入队检测通过的文件会添加到上传队列等待上传)允许排队的文件总数。

void setFilePostName(file_post_name)

动态修改设置中的file_post_name,注意在Linux环境下,FlashPlayer是忽略此设置的。

void setUseQueryString(use_query_string)

动态修改设置中的use_query_string,设置为true的时候,SWFUpload以GET形式发送数据,如果为false,那么就以POST发送数据。

void setDebugEnabled(debug_enabled)

启动/禁止 debug输出,debug_enabled参数是一个布尔值。

void setButtonImageURL(url)

动态修改按钮的图片。url参数是相对于该swf文件或者是绝对地址的图片(或者是SWF)。所有FLASH支持的图片类型都可以使用(gif,jpg,png,或者是一个SWF)。

该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片)

void setButtonDimensions(width, height)

动态修改SWF影片的尺寸以适应Button的图片大小。

void setButtonText(text)

动态设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合setButtonTextStyle方法来设置。关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation

void setButtonTextStyle(css_style_text)

配合setButtonText方法,可以通过CSS样式来动态设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation

void setButtonTextPadding(left, top)

Sets the top and left padding of the Flash button text. The values may be negative.

void setButtonDisabled(isDisabled)

When 'true' changes the Flash Button state to disabled and ignores any clicks.

void setButtonAction(buttonAction)

Sets the action taken when the Flash button is clicked. Valid action values are taken from the BUTTON_ACTION constants.

void setButtonCursor(buttonCursor)

Sets the mouse cursor shown when hovering over the Flash button. Valid cursor values are taken from the BUTTON_CURSOR constants.

事件

SWFUpload在操作过程中会触发一系列事件,开发者可以利用这些回调的处理事件来控制UI,控制操作或者报告错误。

所有的事件都是在SWFUpload实例的上下文中调用的,因此在这些回调的事件中使用this能够直接访问到该触发该事件的实例对象。

所有事件应该在实例初始化时setting参数中预设完成。

flashReady()

该事件函数是内部事件,因此不能被重写。当SWFupload实例化,加载的FLASH完成所有初始化操作时触发此事件。

提醒:对应设置中的自定义事件swfupload_loaded_handler

swfUploadLoaded()

V2.1.0版本中已经删除了此事件

fileDialogStart()

此事件在selectFile或者selectFiles调用后,文件选择对话框显示之前触发。只能同时存在一个文件对话框。

提醒:对应设置中的自定义事件file_dialog_start_handler

fileQueued(file object)

当文件选择对话框关闭消失时,如果选择的文件成功加入上传队列,那么针对每个成功加入的文件都会触发一次该事件(N个文件成功加入队列,就触发N次此事件)。

提醒:对应设置中的自定义事件file_queued_handler

fileQueueError(file object, error code, message)

当选择文件对话框关闭消失时,如果选择的文件加入到上传队列中失败,那么针对每个出错的文件都会触发一次该事件(此事件和fileQueued事件是二选一触发,文件添加到队列只有两种可能,成功和失败)。

文件添加队列出错的原因可能有:超过了上传大小限制,文件为零字节,超过文件队列数量限制,设置之外的无效文件类型。

具体的出错原因可由error code参数来获取,error code的类型可以查看SWFUpload.QUEUE_ERROR中的定义。

提醒:对应设置中的自定义事件file_queue_error_handler

注意:如果选择入队的文件数量超出了设置中的数量限制,那么所有文件都不入队,此事件只触发一次。如果没有超出数目限制,那么会对每个文件进行文件类型和大小的检测,对于不通过的文件触发此事件,通过的文件成功入队。

fileDialogComplete(number of files selected, number of files queued)

当选择文件对话框关闭,并且所有选择文件已经处理完成(加入上传队列成功或者失败)时,此事件被触发,number of files selected是选择的文件数目,number of files queued是此次选择的文件中成功加入队列的文件数目。

提醒:对应设置中的自定义事件file_dialog_complete_handler

注意:如果你希望文件在选择以后自动上传,那么在这个事件中调用this.startUpload() 是一个不错的选择。如果需要更严格的判断,在调用上传之前,可以对入队文件的个数做一个判断,如果大于0,那么可以开始上传。

uploadStart(file object)

在文件往服务端上传之前触发此事件,可以在这里完成上传前的最后验证以及其他你需要的操作,例如添加、修改、删除post数据等。

在完成最后的操作以后,如果函数返回false,那么这个上传不会被启动,并且触发uploadError事件(code为ERROR_CODE_FILE_VALIDATION_FAILED),如果返回true或者无返回,那么将正式启动上传。

提醒:对应设置中的自定义事件upload_start_handler

uploadProgress(file object, bytes complete, total bytes)

该事件由flash定时触发,提供三个参数分别访问上传文件对象、已上传的字节数,总共的字节数。因此可以在这个事件中来定时更新页面中的UI元素,以达到及时显示上传进度的效果。

注意: 在Linux下,Flash Player只在所有文件上传完毕以后才触发一次该事件,官方指出这是Linux Flash Player的一个bug,目前SWFpload库无法解决(我没有测试过)

提醒:对应设置中的自定义事件upload_progress_handler

uploadError(file object, error code, message)

无论什么时候,只要上传被终止或者没有成功完成,那么该事件都将被触发。error code参数表示了当前错误的类型,更具体的错误类型可以参见SWFUpload.UPLOAD_ERROR中的定义。Message参数表示的是错误的描述。File参数表示的是上传失败的文件对象。

例如,我们请求一个服务端的一个不存在的文件处理页面,那么error code会是-200,message会是404。停止、退出、uploadStart返回false、HTTP错误、IO错误、文件上传数目超过限制 等,都将触发该事件,Upload error will not fire for files that are cancelled but still waiting in the queue。(对于官方的这句话我还存在疑问,文件退出以后怎么还会保留在文件上传队列中保留呢?)

提醒:对应设置中的自定义事件upload_error_handler

注意:此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。

uploadSuccess(file object, server data)

当文件上传的处理已经完成(这里的完成只是指向目标处理程序发送了Files信息,只管发,不管是否成功接收),并且服务端返回了200的HTTP状态时,触发此事件。

提醒:对应设置中的自定义事件upload_success_handler

注意:
  1. server data是服务端处理程序返回的数据。
  2. 此时文件上传的周期还没有结束,不能在这里开始下一个文件的上传。
  3. 在window平台下,那么服务端的处理程序在处理完文件存储以后,必须返回一个非空值,否则此事件不会被触发,随后的uploadComplete事件也无法执行。

uploadComplete(file object)

当上传队列中的一个文件完成了一个上传周期,无论是成功(uoloadSuccess触发)还是失败(uploadError触发),此事件都会被触发,这也标志着一个文件的上传完成,可以进行下一个文件的上传了。

如果要进行多文件自动上传,那么在这个时候调用this.startUpload()来启动下一个文件的上传是不错的选择。

提醒:对应设置中的自定义事件upload_complete_handler

注意:当 在进行多文件上传的时候,中途用cancelUpload取消了正在上传的文件,或者用stopUpload停止了正在上传的文件,那么在 uploadComplete中就要很小心的使用this. startUpload(),因为在上述情况下,uploadError和uploadComplete会顺序执行,因此虽然停止了当前文件的上传,但会 立即进行下一个文件的上传,你可能会觉得这很奇怪,但事实上程序并没有错。如果你希望终止整个队列的自动上传,那么你需要做额外的程序处理了。

debug(message)

如果debug setting设置为true,那么页面底部会自动添加一个textArea, SWFUpload库和Flash都会调用此事件来在页面底部的输出框中添加debug信息供调试使用。

提醒:对应设置中的自定义事件debug_handler

SWFUpload功能对象

Settings object

它是一个Object类型的变量,为SWFUpload的实例初始化提供配置。 其中的每一个配置属性都只能出现一次。 很多属性都是可选的,如果可选属性没有被配置,那么会使用SWFUpload库中默认指定的合适的值,具体可查看setting的详细介绍。

例如:(setting可以配置的所有属性)

{ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", file_post_name : "Filedata", post_params : { "post_param_name_1" : "post_param_value_1", "post_param_name_2" : "post_param_value_2", "post_param_name_n" : "post_param_value_n" }, use_query_string : false, requeue_on_error : false, http_success : [201, 202], 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, 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_disable : false, button_cursor : SWFUpload.BUTTON_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", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } }

Settings 描述

upload_url

默认值:空字符串

upload_url设置接收的是一个绝对的或者相对于SWF文件的完整URL。推荐使用完整的绝对路径,以避免由浏览器和FlashPlayer修改了基准路径设置而造成的请求路径错误。

注意:这里需要考虑FlashPlayer的安全域模型。

file_post_name

默认值:Filedata

该参数设置了POST信息中上传文件的name值(类似传统Form中设置了<input type="file" name="uploadImg"/>的name属性)。

注意:在Linux下面此参数设置无效,接收的name总为Filedata,因此为了保证最大的兼容性,建议此参数使用默认值。

post_params

默认值:空的Object对象

post_params定义的是一个包含值对的object类型数据,每个文件上传的时候,其中的值对都会被一同发送到服务端。

注意:设置值对的时候,值只能是字符串或者数字。
use_query_string

默认值:false

该属性可选值为true和false,设置post_params是否以GET方式发送。如果为false,那么则以POST形式发送。

requeue_on_error

默认值:false

该属性可选值为true和false。如果设置为true,当文件对象发生uploadError时(除开fileQueue错误和 FILE_CANCELLED错误),该文件对象会被重新插入到文件上传队列的前端,而不是被丢弃。如果需要,重新入队的文件可以被再次上传。如果要从上 传队列中删除该文件对象,那么必须使用cancelUpload方法。

跟上传失败关联的所有事件同样会被一一触发,因此将上传失败的文件重新入队可能会和Queue Plugin造成冲突(或者是自动上传整个文件队列的自定义代码)。如果代码中调用了startUpload方法自动进行下一个文件的上传,同时也没有采 取任何措施让上传失败的文件退出上传队列,那么这个重新入队的上传失败的文件又会开始上传,然后又会失败,重新入队,重新上传...,进入了无止境的循 环。

该设置是在v2.1.0中引入的。

http_success

默认值:[]

该数组可自定义触发success事件的HTTP状态值。200的状态值始终会触发success,并且只有200的状态会提供serverData。

当接受一个200以外的HTTP状态值时,服务端不需要返回内容。

file_types

默认值:*.*

设置文件选择对话框的文件类型过滤规则,该属性接收的是以分号分隔的文件类型扩展名,例如“ *.jpg;*.gif”,则只允许用户在文件选择对话框中可见并可选jpg和gif类型的文件。默认接收所有类型的文件。

提醒:该设置只是针对客户端浏览器的过滤,对服务端的文件处理中的文件类型过滤没有任何限制,如果你需要做严格的文件过滤,那么服务端同样需要程序检测。

file_types_description

默认值:All Files

设置文件选择对话框中显示给用户的文件描述。

file_size_limit

默认值:0

设置文件选择对话框的文件大小过滤规则,该属性可接收一个带单位的数值,可用的单位有B,KB,MB,GB。如果忽略了单位,那么默认使用KB。特殊值0表示文件大小无限制。

提醒:该设置只对客户端的浏览器有效,对服务端的文件处理没有任何限制,如果你需要做严格文件过滤,那么服务端同样需要程序处理。

file_upload_limit

默认值:0

设置SWFUpload实例允许上传的最多文件数量,同时也是设置对象中file_queue_limit属性的上限。一旦用户已经上传成功或者添 加文件到队列达到上最大数量,那么就不能继续添加文件了。特殊值0表示允许上传的数量无限制。只有上传成功(上传触发了uploadSuccess事件) 的文件才会在上传数量限制中记数。使用setStats方法可以修改成功上传的文件数量。

注意:该值不能跨页面使用,当页面刷新以后该值也被重置。严格的文件上传数量限制应该由服务端来检测、管理。

file_queue_limit

默认值:0

设置文件上传队列中等待文件的最大数量限制。当一个文件被成功上传,出错,或者被退出上传时,如果文件队列中文件数量还没有达到上限,那么可以继续 添加新的文件入队,以顶替该文件在文件上传队列中的位置。如果允许上传的文件上限(file_upload_limit)或者剩余的允许文件上传数量小于 文件队列上限(file_queue_limit),那么该值将采用这个更小的值。

flash_url

默认值:空字符串

设置绝对或者相对于此上传页面的完整URL,一旦SWFupload实例化以后,此设置不能再被修改。

提醒:测试发现使用setUploadURL方法是可以修改此设置的。

flash_width

固定值:1px

(v2.1.0已删除) 设置插入flash影片的HTML元素容器的宽度。如果此设置小于1像素,一些浏览器会出现功能异常。 因此该值在v2.1.0中删除了自定义设置,默认设置为1像素了。

flash_height

固定值:1px

(v2.1.0已删除) 设置插入flash影片的HTML元素容器的高度。如果此设置小于1像素,一些浏览器会出现功能异常。 因此该值在v2.1.0中删除了自定义设置,默认设置为1像素了。

flash_color

默认值:#FFFFFF

(v2.2.0已删除) 设置HTML页面中的flash背景色,默认为#FFFFFF

prevent_swf_caching

默认值:true

(v2.2.0新增)该布尔值设置是否在Flash URL后添加一个随机值,用来防止浏览器缓存了该SWF影片。这是为了解决一些基于IE-engine的浏览器上的出现一个BUG。

提醒:SWFUpload是直接在flash_url后添加了一个swfuploadrnd的随机参数。如果你给定的flash_url中已经存在了GET类型的参数,那么就会出现两个问号连接符导致错误。

debug

默认值:false

该值是布尔类型,设置debug事件是否被触发。

注意:SWFUpload 代码中是将此变量和字符串true做的恒等判断,因此它只认定true为DEBUG模式开启,如果设置为1,虽然JS认定是开启模式,并且在初始化完毕后 会有生成Debug Console,但后续操作中FLASH不会输出调试信息。(因为我习惯用1和0代表布尔变量,因此一度疑惑为何Flash的debug信息无法输出。)

button_placeholder_id

默认值:null

(v2.2.0新增) 该必要参数指定了swfupload.swf将要替换的页面内的DOM元素的ID值。当对应的DOM元素被替换为SWF元素时,SWF的容器会被添加一个名称为"swfupload"的样式选择器供CSS自定义使用。

button_image_url

默认值:空字符串

(v2.2.0新增) V2.2.0版最大的改变就是引入了一个按钮到SWF中,利用该参数可以设置一个相对于该swf文件或者是绝对地址的图片(或者是SWF),作为按钮的UI展现。所有FLASH支持的图片类型都可以使用(gif,jpg,png,或者是一个SWF)。

该按钮图片需要经过一定规则(CSS Sprite)的处理。按钮图片中需要包括按钮的4个状态,从上到下依次是normal, hover, down/click, disabled.(可以参照官方demo中的图片)

button_width

默认值:1

(v2.2.0新增) 设置该SWF的宽度属性。

button_height

默认值:1

(v2.2.0新增)设置该SWF的高度属性(按钮图片高度的1/4)

button_text

默认值:空字符串

(v2.2.0新增) 该属性设置Flash Button中显示的文字,支持HTML。HTML文本的样式可以通过CSS选择器并配合button_text_style参数来设置。关于Flash文本对HTML的支持详细可见 Adobe's Flash documentation

button_text_style

默认值:"color: #000000; font-size: 16pt;"

(v2.2.0新增)此参数配合button_text参数,可以通过CSS样式来设置Flash Button中的文字样式。关于Flash文本对CSS的支持详细可见Adobe's Flash documentation

button_text_top_padding

默认值:0

(v2.2.0新增) 设置Flash Button上文字距离顶部的距离,可以使用负值。

button_text_left_padding

默认值:0

(v2.2.0新增) 设置Flash Button上文字距离左侧的距离,可以使用负值。

button_action

默认值:SWFUpload.BUTTON_ACTION.SELECT_FILES(多文件上传)

(v2.2.0新增) 设置Flash Button点击以后的动作。默认为SWFUpload.BUTTON_ACTION.SELECT_FILES,点击按钮将会打开多文件上传的对话框。 如果设置为SWFUpload.BUTTON_ACTION.SELECT_FILE,则为单文件上传。如果设置为 SWFUpload.BUTTON_ACTION.START_UPLOAD,则启动文件上传。

button_disabled

默认值:false

(v2.2.0新增) 该布尔值设置Flash Button是否是禁用状态。当它处于禁用状态的时候,点击不会执行任何操作。

button_cursor

默认值:SWFUpload.CURSOR.ARROW(箭头光标)

(v2.2.0新增) 此参数可以设置鼠标划过Flash Button时的光标状态。默认为SWFUpload.CURSOR.ARROW,如果设置为SWFUpload.CURSOR.HAND,则为手形

button_window_mode

默认值:SWFUpload.WINDOW_MODE.WINDOW

(v2.2.0新增) 此参数可以设置浏览器具体以哪种模式显示该SWF影片。

custom_settings

默认值:空的Object对象

该属性接收一个Object类型数据,可用于安全地存储与SWFUpload实例关联的自定义信息,例如属性和方法,而不用担心跟SWFUpload内部的方法和属性冲突以及版本升级的兼容。

设置完毕以后,可以通过实例的customSettings属性来访问。

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";

Event Handlers

默认值:null

剩下的设置定义的是一系列事件处理的回调函数,在SWFUpload的操作过程中相应的事件会被触发。如果你需要在这些回调中进行自定义操作,那么你应该在设置中定义对应的JavaScript函数。

File Object

File Object包含了一组可用的文件属性,很多处理事件都会传递一个File Object参数来访问该文件的相关属性。

{ id : string, // SWFUpload控制的文件的id,通过指定该id可启动此文件的上传、退出上传等 index : number, // 文件在选定文件队列(包括出错、退出、排队的文件)中的索引,getFile可使用此索引 name : string, // 文件名,不包括文件的路径。 size : number, // 文件字节数 type : string, // 客户端操作系统设置的文件类型 creationdate : Date, // 文件的创建时间 modificationdate : Date, // 文件的最后修改时间 filestatus : number // 文件的当前状态,对应的状态代码可查看SWFUpload.FILE_STATUS }

Stats Object

该对象提供了上传队列的状态信息,访问实例的getStats方法可获取此对象。

该对象包括下面属性:

{ in_progress : number // 值为1或0,1表示当前有文件正在上传,0表示当前没有文件正在上传 files_queued : number // 当前上传队列中存在的文件数量 successful_uploads : number // 已经上传成功(uploadSuccess触发)的文件数量 upload_errors : number // 已经上传失败的文件数量 (不包括退出上传的文件) upload_cancelled : number // 退出上传的文件数量 queue_errors : number // 入队失败(fileQueueError触发)的文件数量 }

所有这些属性的值都可以使用setStats方法来修改,除了in_progressfiles_queued

例子:

aspx页面

  

   
   
   
<% @ Page Language = " C# " AutoEventWireup = " true " CodeFile = " Default123.aspx.cs " Inherits = " UpLoadcomp_Default123 " %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head id ="Head1" runat ="server" >
< title > 多选文件上传 </ title >
< link href ="Common/default.css" rel ="stylesheet" type ="text/css" />

< script type ="text/javascript" src ="Common/swfupload.js" ></ script >

< script type ="text/javascript" src ="Common/handlers.js" ></ script >

< script type ="text/javascript" src ="Common/prototype.js" ></ script >

< script type ="text/javascript" >

var swfu;
window.onload
= function () {
if (form1.ddlFileType.value == " p " )
{
size_limit
= " 0 " ; // 1M = 1048576;
types = " *.jpg; *.bmp; *.gif; " ;
types_description
= " 图像文件 " ;
}
else if (form1.ddlFileType.value == " a " )
{
size_limit
= " 0 " ;
types
= " *.mp3; *.wmv " ;
types_description
= " 音频文件 " ;
}
else if (form1.ddlFileType.value == " r " )
{
size_limit
= " 0 " ;
types
= " *.rm; *.avi; *.mpeg; *.rmvb;*.wmv; *.dat " ;
types_description
= " 视频文件 " ;
}
else
{
size_limit
= " 0 " ;
types
= " *.* " ;
types_description
= " 所有文件 " ;
}

swfu
= new SWFUpload({
// Backend Settings
upload_url: " upload.aspx " , // Relative to the SWF file
post_params : {
" ASPSESSID " : " <%=Session.SessionID %> "
},

// File Upload Settings
file_size_limit : size_limit, // 限制上传文件的大小, 0表示不受限制
file_types : types, // 上传文件类型
file_types_description : types_description, // 上传文件类型描述
file_upload_limit : " 0 " , // 限制上传文件选择的个数, "0"表示不受限制

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,

// Button settings

button_image_url :
" images/XPButtonNoText_80x22.png " , // Relative to the SWF file
button_placeholder_id : " spanButtonPlaceholder " ,
button_width:
100 ,
button_height:
22 ,
button_text :
' 选择文件 ' ,
button_text_style :
' .button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; } ' ,
button_text_top_padding:
1 ,
button_text_left_padding:
5 ,

// Flash Settings
flash_url : " Common/swfupload.swf " , // Relative to this file

custom_settings : {
upload_target :
" divFileProgressContainer "
},

// Debug Settings
debug: false
});
}



</ script >
< style type ="text/css" >
table
{
border-collapse
: collapse ;
border
: 1px green solid ;
}

td
{
border
: 1px solid ;
}
</ style >
</ head >
< body >
< form id ="form1" runat ="server" >
< div id ="content " style ="width: 400px;" >
< h2 >
多选文件上传测试
</ h2 >
< asp:DropDownList ID ="ddlFileType" runat ="server" AutoPostBack ="true" Width ="100px" >
< asp:ListItem Value ="p" > 照片 </ asp:ListItem >
< asp:ListItem Value ="r" > 视频 </ asp:ListItem >
< asp:ListItem Value ="a" > 音频 </ asp:ListItem >
< asp:ListItem Value ="o" > 所有 </ asp:ListItem >
</ asp:DropDownList >
< div id ="swfu_container" style ="margin: 0px 5px; width: 400px;" >
< div >
< span id ="spanButtonPlaceholder" ></ span >
</ div >
</ div >
< div id ="divFileProgressContainer" style ="border: 1px; width: 400px;" >
</ div >
<% -- table style = " width: 100% " >
< tr >

< td align = " left " style = " width: 100px " valign = " middle " >
< br />< input type = " button " value = " 保 存 " onclick = " save() " />
< br />
< asp:Button ID = " btnDelete " runat = " server " OnClick = " btnDelete_Click " Text = " 删 除 " />< br />
< br />
< asp:Button ID = " btnDelAll " runat = " server " OnClick = " btnDelAll_Click " Text = " 清 空 " /></ td >
< td style = " width: 40% " align = " center " valign = " top " >
& nbsp; < br />< div id = " tip " ></ div >
</ td >
</ tr >
</ table >-- %>
</ div >
< asp:Button ID ="Button1" runat ="server" Text ="多选批量上传" OnClick ="Button1_Click" />
< asp:Button ID ="Button2" runat ="server" onclick ="Button2_Click" Text ="Button" />
</ form >
< TABLE id ="tableuploadList" border ="1" >
< tbody >
< tr id ="20110523103917597" >
< td style ="border-bottom:soid 1px;" >
biangeng.gif
&nbsp; &nbsp;
</ td >
< td >
< a style ="cursor: pointer" onclick ='clearone("20110523103917597")' > 删除 </ a >
</ td >
</ tr >
< tr id ="20110523103917660" >
< td >
printer.gif
&nbsp; &nbsp;
</ td >
< td >
< a style ="cursor: pointer" onclick ='clearone("20110523103917660")' > 删除 </ a >
</ td >
</ tr >
< tr id ="20110523103917707" >
< td >
rizhi.gif
&nbsp; &nbsp;
</ td >
< td >
< a style ="cursor: pointer" onclick ='clearone("20110523103917707")' > 删除 </ a >
</ td >
</ tr >
< tr id ="20110523103917754" >
< td >
user.gif
&nbsp; &nbsp;
</ td >
< td >
< a style ="cursor: pointer" onclick ='clearone("20110523103917754")' > 删除 </ a >
</ td >
</ tr >
< tr >
< td colspan ="2" style ="text-align:center;" >
< a style ="cursor: pointer" onclick ="clearall()" > 清空 </ a >
</ td >
</ tr >
</ tbody >
</ TABLE >


</ body >
</ html >

< script type ="text/javascript" >
function save()
{


var url = ' Save.aspx ' ;
// var pars = 'op='+ flag;
var myinnerAjax = new Ajax.Updater(
'' ,
url,
{
method:
' post ' ,
parameters:
null , // pars,如果没有参数,可以给一个空值null
onLoading : loading,
onComplete : complete
});


function loading(request)
{
$(
' tip ' ).innerHTML = " 上传中... " ;
}
function complete(request)
{
if (request.responseText == " NO " )
{
$(
' tip ' ).innerHTML = " 请先选择图片 " ;
}
else
{
$(
' tip ' ).innerHTML = " 上传完成 " ;
}
}

}



</ script >

code

   
   
   
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Collections.Generic;

public partial class UpLoadcomp_Default123 : System.Web.UI.Page
{
// protected void Page_Load(object sender, EventArgs e)
// {
// if (!IsPostBack)
// {
// // Clear the user's session
// Session.Clear();
// }
// }

// protected void btnMultiUpload_Click(object sender, EventArgs e)
// {
// BindList();

// }

/// /protected void btnSave_Click(object sender, EventArgs e)
/// /{
/// / if (Session["file_information"] != null)
/// / {
/// / List <Thumbnail> thumbnails = Session["file_information"] as List <Thumbnail> ;

/// / string UploadPath = Server.MapPath("uploadFiles/");

/// / // ListBox1.Items.Clear();
/// / foreach (Thumbnail img in thumbnails)
/// / {
/// / FileStream fs = new FileStream(UploadPath + img.ID + "." + img.Format, FileMode.Create);

/// / BinaryWriter bw = new BinaryWriter(fs);
/// / bw.Write(img.Data);

/// / bw.Close();
/// / fs.Close();
/// / }
/// / }
/// /}



/// // <summary>
/// // 删除
/// // </summary>
/// // <param name="sender"></param>
/// // <param name="e"></param>
// protected void btnDelete_Click(object sender, EventArgs e)
// {
// if (Session["file_information"] != null)
// {
// List<Thumbnail> thumbnails = Session["file_information"] as List<Thumbnail>;

// for (int i = 0; i < thumbnails.Count; i++)
// {
// if (ListBox1.SelectedValue == thumbnails[i].ID)
// {
// if (System.IO.File.Exists(Server.MapPath("uploadFiles\\" + thumbnails[i].ID + "." + thumbnails[i].Format)))
// {
// System.IO.File.Delete(Server.MapPath("uploadFiles\\" + thumbnails[i].ID + "." + thumbnails[i].Format));
// }

// thumbnails.RemoveAt(i);
// break;
// }
// }
// if (thumbnails.Count == 0)
// {
// Session["file_information"] = null;
// }
// else
// {
// Session["file_information"] = thumbnails; // 重新缓存
// }
// BindList();
// Image1.Visible = false;
// }
// }

/// // <summary>
/// // 清空
/// // </summary>
/// // <param name="sender"></param>
/// // <param name="e"></param>
// protected void btnDelAll_Click(object sender, EventArgs e)
// {
// if (Session["file_information"] != null)
// {
// List<Thumbnail> thumbnails = Session["file_information"] as List<Thumbnail>;

// foreach (Thumbnail img in thumbnails)
// {
// if (System.IO.File.Exists(Server.MapPath("uploadFiles\\" + img.ID + "." + img.Format)))
// {
// System.IO.File.Delete(Server.MapPath("uploadFiles\\" + img.ID + "." + img.Format));
// }
// }

// Session["file_information"] = null;

// BindList();
// Image1.Visible = false;
// }

// }

// private void BindList()
// {
// // if (Session["file_information"] != null)
// // {
// // List<Thumbnail> thumbnails = Session["file_information"] as List<Thumbnail>;

// // ListBox1.Items.Clear();
// // foreach (Thumbnail img in thumbnails)
// // {
// // ListBox1.Items.Add(new ListItem(img.FileName, img.ID));
// // }
// // }
// // else
// // {
// // ListBox1.Items.Clear();
// // }
// }


// protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
// {
// if (Session["file_information"] != null)
// {
// List<Thumbnail> thumbnails = Session["file_information"] as List<Thumbnail>;

// for (int i = 0; i < thumbnails.Count; i++)
// {
// if (thumbnails[i].ID == ListBox1.SelectedValue)
// {
// string imgFormat = "jpg; jpeg; bmp; gif";
// string format = thumbnails[i].Format;
// if (imgFormat.Contains(format))
// {
// if (System.IO.File.Exists(Server.MapPath("uploadFiles\\" + thumbnails[i].ID + "." + thumbnails[i].Format)))
// {
// Image1.Visible = true;
// Image1.ImageUrl = "uploadFiles\\" + thumbnails[i].ID + "." + thumbnails[i].Format;
// break;
// }
// }
// else
// {
// Image1.Visible = false;
// }

// }
// }
// }
// else
// {
// Image1.Visible = false;
// }
// }

protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
Session[
" file_information " ] = null ;
Response.Write(Session[
" a " ].ToString());
}
}
protected void Button1_Click( object sender, EventArgs e)
{
if (Session[ " file_information " ] != null )
{
List
< Thumbnail > thumbnails = Session[ " file_information " ] as List < Thumbnail > ;
string UploadPath = Server.MapPath( " uploadFiles/ " );
// ListBox1.Items.Clear();
foreach (Thumbnail img in thumbnails)
{
FileStream fs
= new FileStream(UploadPath + img.ID + " . " + img.Format, FileMode.Create);
BinaryWriter bw
= new BinaryWriter(fs);
bw.Write(img.Data);
bw.Close();
fs.Close();
}
Session[
" file_information " ] = null ;
}
}
protected void Button2_Click( object sender, EventArgs e)
{
Session[
" file_information " ] = null ;
}
}

 upload.aspx:

   
   
   
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Collections.Generic;
public partial class UpLoadcomp_upload : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
System.IO.Stream myStream
= null ;
// Session.Abandon();

try
{
Session[
" a " ] = " fdsafsdfsdf " ;
// Get the data
HttpPostedFile jpeg_image_upload = Request.Files[ " Filedata " ];

FileUpload fu
= new FileUpload();

string fileName = jpeg_image_upload.FileName;
// 图片格式
string format = fileName.Substring(fileName.LastIndexOf( ' . ' ) + 1 );

int fileLen;

fileLen
= jpeg_image_upload.ContentLength;

byte [] input = new byte [fileLen];

myStream
= jpeg_image_upload.InputStream;

myStream.Read(input,
0 , fileLen);

// Store the data in my custom Thumbnail object
string thumbnail_id = DateTime.Now.ToString( " yyyyMMddHHmmssfff " );
Thumbnail thumb
= new Thumbnail(thumbnail_id, input);
Thumbnail thumbI
= new Thumbnail(thumbnail_id, fileName, format, input);

// Put it all in the Session (initialize the session if necessary)
List < Thumbnail > thumbnails = Session[ " file_info " ] as List < Thumbnail > ;
List
< Thumbnail > thumbnailsI = Session[ " file_information " ] as List < Thumbnail > ;

if (thumbnails == null )
{
thumbnails
= new List < Thumbnail > ();
Session[
" file_info " ] = thumbnails;
}
thumbnails.Add(thumb);

if (thumbnailsI == null )
{
thumbnailsI
= new List < Thumbnail > ();
Session[
" file_information " ] = thumbnailsI;
}
thumbnailsI.Add(thumbI);

Response.StatusCode
= 200 ;
Response.Write(thumbnail_id);

}
catch (Exception ex)
{
// If any kind of error occurs return a 500 Internal Server error
Response.StatusCode = 500 ;
Response.Write(
" An error occured " );
Response.Write(ex.Message);
Response.End();
}
finally
{
// Clean up
if (myStream != null ) myStream.Close();

Response.End();
}

}
}

thumbnail.aspx

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

public partial class UpLoadcomp_thumbnail : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request.QueryString["id"] as string;
        if (id == null)
        {
            Response.StatusCode = 404;
            Response.Write("Not Found");
            Response.End();
            return;
        }

        List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;

        if (thumbnails == null)
        {
            Response.StatusCode = 404;
            Response.Write("Not Found");
            Response.End();
            return;
        }

        foreach (Thumbnail thumb in thumbnails)
        {
            if (thumb.ID == id)
            {
                Response.ContentType = "image/jpeg";
                Response.BinaryWrite(thumb.Data);
                Response.End();
                return;
            }
        }

        // If we reach here then we didn't find the file id so return 404
        Response.StatusCode = 404;
        Response.Write("Not Found");
        Response.End();
    }
}