再次分享一个多选文件上传方案“.NET研究”

  多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的。很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能。

  主要实现的功能如下:

  一、选择多个文件上传并显示单个文件的上传进度

  二、显示所有文件总的上传进度

  三、显示所有上传文件的总大小

  四、上传前可以删除任意选定一个或多个文件(按住Ctrl或Shift键)

  五、ASP.NET页面调用生成的swf文件异步上传到服务器

  先看下演示的截图,如下:     

上海徐汇企业网站设计与制作="http://images.cnblogs.com/cnblogs_com/peaceli/up3.jpg" border="0" alt="" width="610" height="397" />

上海企业网站制作c="http://images.cnblogs.com/cnblogs_com/peaceli/up5.jpg" border="0" alt="" width="599" height="397" />

  大致功能和上面截图一样,下面主要说下ASP.NET里怎么调用,FLEX的里面代码我这里就不详细说明了,FLEX里面的代码不多,文章后面提供下载,用flex3.0或4.0可以打开运行。

  其中有一个地方说明一下,就是在多选删除的地方,为了保证随意多选删除的正确性,需要把选定的索引项降序排序,每次从数组最大处删除,避免循环删除时索引超界。


function deleteItem():void{
var selectItems:Array = process_list.selectedItems;
var selectIndex:Array = process_list.selectedIndices;
selectIndex = selectIndex.sort(2);//索引按降序排序
var iCount:int = selectItems.length;
var sizeMum:Number = 0;
for(var i:int=0;i<iCount;i++){
info.splice(selectIndex[i],1);
fileRef.fileList.splice(selectIndex[i],1);//移除的选择项按索引从大到小移除,以便移除过程中索引不超界
}
for(var j:Number=0;j<fileRef.fileList.length;j++){
sizeMum上海闵行企业网站制作n style="color: #000000;">+=fileRef.fileList[j].size;
}
process_list.dataProvider = info;
tip_txt.text="共"+fileRef.fileList.length+"个文件 "+(sizeMum/(1024*1024)).toFixed(4).toString()+"MB";

if(info.length<=0){
delete_btn.enabled = false;
}
}

  调用其实也比较简单,新建一个aspx页面加载生成的swf文件,这里生成的文件名是upload.swf,利用flex内置的swfobject.js里面的方法加载,如下:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>无标题页</title>
<style type="text/css" media="screen">
html, body { height:100%; }
body { margin:0; padding:0; overflow:auto; text-align:center;
background-color: #ffffff; }
#flashContent { display:none; }
</style>

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

var swfVersionStr = "10.0.0";
var xiSwfUrlStr = "playerProductInstall.swf";
var flashvars = {};
flashvars.url = "SaveFile.aspx?Param=ID|100,NAME|测试用户";
var params = {};
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "upload";
attributes.name = "upload";
attributes.align = "middle";
swfobject.embedSWF(
"upload.swf", "flashContent",
"587", "370",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);

function uploadCompelete(){
//完成后的操作,如页面跳转或关闭当前页
document.getElementById('btnUpload').disabled = false;
}
function submitForm(){
thisMovie("upload").uploadfile();
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft上海网站建设span style="background-color: #f5f5f5; color: #000000;">") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function disabledButton()
{
document.getElementById('btnUpload').disabled = true;
}

</script>
</head>
<body>
<div id="flashContent" style="width:587px; height:380px">
</div>
<br />
<input id="btnUpload" style="width: 71px" type="button" value="上 传" onclick="submitForm()" />
</body>
</html>上海闵行企业网站设计与制作n>

  如上,页面放置一个按钮,执行upload.swf里面的uploadfile方法,在flex里面其实是回调了uploadHandler方法:


//===================
// 点击上传按钮
//===================
internal function uploadHandler():void{
if(uploadFile_num!=0) return;
if(process_list.dataProvider==null || info.length<=0){
Alert.show("您还未选择文件!","提示信息");
return;
}
else
{
ExternalInterface.call("disabledButton"); //点上传后禁用按钮
}
for(var i:Number=0;i<fileRef.fileList.length;i++){
upload_size_total+=fileRef.fileList[i].size;
}
uploadfile(uploadFile_num);
add_btn.enabled = false; //点上传后禁用浏览按钮
delete_btn.enabled = false;//点上传后禁用删除按钮
}

  SaveFile.aspx页面主要是接收并存储文件,如下:


protected void Page_Load(object sender, EventArgs e)
{
//string param = Request["Param"];
string path = Server.MapPath("files/");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
//HttpFileCollection files = Request.Files;
//string fileName = string.Empty;
//for (int i = 0; i < files.Count; i++)
//{
// fileName = Path.GetFileName(files[i].FileName).ToLower();
// files[i].SaveAs(path + fileName);
//}
HttpPostedFile file = Request.Files["Filedata"]; //文件是一个一个异步提交过来,所以不需要循环文件集合
if (file != null && file.ContentLength > 0)
{
file.SaveAs(path+Request.Form["filename"]);
}
}

  毕竟不是以文件流的形式接收和存储,所以如果是上传大文件的话,可以看到显示页面已经上传完成100%,但是到这个处理存储页面会停顿一会,接收并存储完成后前台页面才会反应过来。

  还有一点要提一下,就是如果传递的参数包含中文的话,需要config编码格式为utf-8格式,但有原先的系统可能是gb2312格式的,改成utf-8可能对系统有影响,可以单独建一个webconfig,上传的时候就读单独的config。查了下说flash.system.System.useCodePage=true;设置可以解决中文乱码问题,我试了下还是不好用,最后还是修改的编码格式。

  源码下载:flex多选文件上传 (用VS2005及以上或flashbuilder3.0,4.0打开)

时间: 2024-09-10 06:01:28

再次分享一个多选文件上传方案“.NET研究”的相关文章

一起谈.NET技术,再次分享一个多选文件上传方案

多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能. 主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前

再次“.NET技术”分享一个多选文件上传方案

多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能. 主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前

asp.net批量多选文件上传解决方案_实用技巧

多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能.主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前可

asp.net 批量多选文件上传代码

多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能. 主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前

mfc-用MFC做一个简单的文件上传的程序 ,上传过程中的暂停和继续怎么实现?

问题描述 用MFC做一个简单的文件上传的程序 ,上传过程中的暂停和继续怎么实现? rt 解决方案 能不能中断和继续取决于服务器怎么实现的,服务器必须具有分块接收上传文件的能力. 解决方案二: 你要把你的主要实现和主界面分开,就是用多线程,一个线程用于处理数据,主界面线程用于显示和接受用户操作,当用户按开始按钮时,开启处理线程,暂停时暂停处理线程,继续时再唤醒处理线程就行了. 解决方案三: java Web && 文件上传--简单实现

分享一个.NET版的多选文件上传操作示例

文件上传,无刷新上传,文件批量上传,批量无刷新上传,这些词这年头好像非常多,不管那种上传能满足实际的需求就是好的,一般上传文件时,点文件浏览框,只能选 择单个文件,如果要上传多个,浏览多次,然后点击批量上传就可以了,也很好的,也不刷新也有进度显示,完全不错的.网上也有关于上传文件的能够多选的例子,点浏 览时可以按住ctrl键或者shift键选择多个,然后上传.但是好像这样的.NET版的不多,朋友发我一个整理过的Demo,之后我又稍微整理了下,觉得还好,可以分享给大家一 下,好与不好就不说,因为没

用VB6做一个简单的文件上传组件(一)

最近在单位做的一个项目里需要有文件上传的功能正好手头一本书的附赠光盘里有一个上传组件心中大喜.可惜随之便发现这是一个试用版不给钱就只能用50次太小气了好在头头催得不紧时间充裕干脆自己试着做一个既可长经验值又能长成就感不试白不试以下介绍的便是俺折腾了两天半捣鼓出来的一个只能说是雏形的玩意区区三十行代码大侠们不要笑俺哦这只是写给与俺一样好奇心强但经验值低的弟兄们看的.    文件上载所需的第一步当然是进入一个有"file"表单元素的页面具体就不说了大家都知道.但是若想做一个能够接受该文件并

一个加强的文件上传(VB.Net)

上传 这个文件上传应该可以满足一般的需要了,其中的添加到数据库记录,您可以按需要省略掉. 代码:upload.aspx <%@ Page Language="VB"%><% @ Import Namespace=" System.IO " %><% @ Import Namespace=" System.DATA " %><%@ import Namespace="System.Data.Sql

求一个文件上传方案

问题描述 用的是springMVC,要求是多文件上传,大文件上传(视频,多大不定).还有一个疑惑,一个表单有很多字段,上传的文件是form提交还是和form分开提交比较好? 问题补充:等待时间会不会太长? 解决方案 上传之前传个标识,证明是准备上传,并且记录文件大小.下次发现上传的文件小于你的目标文件,则提示.解决方案二:引用关于上传文件的保存点不在同一个应用下的情况有没有谁做过? 具体什么要求能描述清楚点么?举个典型的例子也行解决方案三:还有 ,你得另外开帖啊解决方案四:引用关于上传文件的保存