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

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

  多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的。很多的多选上传基本上都是调用的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打开)

目录
相关文章
|
11月前
|
开发框架 前端开发 .NET
ASP.NET WEB——项目创建与文件上传操作
ASP.NET WEB——项目创建与文件上传操作
122 0
|
安全 C# 开发工具
模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
模拟.NET实际应用场景,综合应用三个主要知识点:一是使用dnSpy反编译第三库及调试,二是使用Lib.Harmony库实现第三库拦截、伪造,三是实现同一个库支持多版本同时引用。
模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
|
6天前
|
数据采集 自然语言处理 JavaScript
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
随着数据采集需求的增加,传统爬虫工具如Selenium、Jsoup等因语言割裂、JS渲染困难及代理兼容性差等问题,难以满足现代网站抓取需求。微软推出的Playwright框架,凭借多语言支持(Python/Java/.NET/Node.js)、统一API接口和优异的JS兼容性,解决了跨语言协作、动态页面解析和身份伪装等痛点。其性能优于Selenium与Puppeteer,在学术数据库(如Scopus)抓取中表现出色。行业应用广泛,涵盖高校科研、大型数据公司及AI初创团队,助力构建高效稳定的爬虫系统。
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
|
2月前
|
人工智能 机器人
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
|
8月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
101 0
|
8月前
|
开发框架 .NET API
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
223 0
|
10月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
259 0
|
11月前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
|
11月前
|
开发框架 .NET
Asp.Net文件上传
Asp.Net文件上传
60 0
|
存储
.NET Core - 自定义配置数据源:低成本实现定制化配置方案
.NET Core - 自定义配置数据源:低成本实现定制化配置方案