一、概述

放清明假啦,宿舍的人都差不多走完了,就留下一两个宅男还在宿舍搞基。在这无聊之际,没有什么事可做,又不想把时间浪费在看视频,打游戏之类。想了想,于是就着手总结一下上次有用到的一个开源的大文件上传组件NeatUpload。

NeatUpload是由Dean Brettle在2005开始编写的一个ASP.NET组件,它允许开发人员以流的形式上传文件并存储在文件系统或数据库中,而且允许用户监控上传进度。2010年,由于Dean Brettle要去做其他的事情,就将NeatUpload交给Joe Audette管理,并将项目托管在CodePlex上。好啦,我们就不去深究它的背景情况啦,我们关心的是如何将它应用到我们自己的项目中。

首先,我们去官网下载软件,地址:
    NeatUpload:http://neatupload.codeplex.com/   我下载的是NeatUploadBinaries-1-3-26版本的。

二、安装步骤

1.将下载的安装包解压出来,把NeatUploadBinaries-1-3-26\NeatUploadBinaries目录下的NeatUpload文件夹复制到Webroot的根目录下,将NeatUploadBinaries-1-3-26\NeatUploadBinaries\bin目录下的Brettle.Web.NeatUpload.dll文件复制到相应的放DLL文件的文件夹里,一般在bin文件夹下。

2.添加引用,把Brettle.Web.NeatUpload.dll文件引用到项目中来。右键工具箱常规选项卡,选择项,打开选择工具箱项窗体。在.NET Framework组件下选择浏览,将Brettle.Web.NeatUpload.dll添加到工具箱中。这时常规选项卡下多出几个控件。我们主要用到的有InputFile、MultiFile和ProgressBar这三个控件。

三、配置neatupload上传控件,修改Web.config

  将<configuration>节点下的第一个子元素配置为:   <configSections><sectionGroup name="system.web"><section name="neatUpload" type="Brettle.Web.NeatUpload.ConfigSectionHandler,Brettle.Web.NeatUpload" allowLocation="true" /></sectionGroup></configSections>在<system.web>节点下加上如下配置:<httpModules><!--大文件上传--><add name="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule,Brettle.Web.NeatUpload"/></httpModules><!--useHttpModule="true" 设为true时才能看到上传状态,默认是False--><neatUpload useHttpModule="true" maxNormalRequestLength="1048576" maxRequestLength="1048576" defaultProvider="FilesystemUploadStorageProvider"><providers><add name="FilesystemUploadStorageProvider" type="Brettle.Web.NeatUpload.FilesystemUploadStorageProvider, Brettle.Web.NeatUpload"/></providers></neatUpload><httpRuntime  maxRequestLength="1048576" executionTimeout="3600"/>

四、拖拽控件在页面上,开始编程

1.单文件上传,将InputFile和ProgressBar控件加进页面中,再添加一个服务器端按钮,添加鼠标点击事件,如下:

    <script type="text/javascript"> function ToggleVisibility(id, type)   //进度条的隐藏和显示{el = document.getElementById(id);if(el.style){if(type == 'on'){ el.style.display = 'block';}else{ el.style.display = 'none';}}else{if(type == 'on'){ el.display = 'block';}else{  el.display = 'none';}}}</script>
    <form id="form1" runat="server"><div><div><Upload:InputFile ID="InputFile1" runat="server" /><asp:Button ID="upload" runat="server" Text="上传"  style="display:none"              OnClientClick="ToggleVisibility('progress', 'on')" OnClick="upload_Click" /></div><div id="progressbar"><Upload:ProgressBar ID="ProgressBar1" runat='server' Inline="True"></Upload:ProgressBar></div></div></form>

后台代码

    protected void upload_Click(object sender,EventArgs e){if (InputFile1.HasFile){string FileName = this.InputFile1.FileName;//获取上传文件的文件名,包括后缀string ExtenName = System.IO.Path.GetExtension(FileName);//获取扩展名string SaveFileName = System.IO.Path.Combine(System.Web.HttpContext.Current.Request.MapPath("UpLoads/"), DateTime.Now.ToString("yyyyMMddhhmm") + ExtenName);//合并两个路径为上传到服务器上的全路径if (this.InputFile1.ContentLength > 0){try{this.InputFile1.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite);}catch (Exception ex){throw ex;}}else{Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "警告", "alert('选择要上传的文件为空!');",true);}string url = "UpLoads/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ExtenName; //文件保存的路径float FileSize = (float)System.Math.Round((float)InputFile1.ContentLength / 1024000, 1); //获取文件大小并保留小数点后一位,单位是M}else{Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "警告", "alert('请选择要上传的文件!');", true);}}

上传文件前界面如下:

上传文件后,界面如下:

五、修改进度条样式,主要修改default.css、Progress.aspx及ProgressBar控件的属性

default.css部分,修改进度条的颜色,背景图片,显示文字的颜色等

.ProgressDisplay .ProgressBar
{background-color:#6CAF00; /*修改背景颜色*/background-image:url('progressbar.gif')  /*修改背景图片*/
}
#normalInProgress{color: Red;      /*正在上传时进度条的字体颜色*/
}
#completed{color:Blue;   /*上传完成的字体颜色*/
}

Progress.aspx部分,修改在整个上传过程中进度条显示的状态和信息

<Upload:DetailsSpan id="normalInProgress" runat="server" WhenStatus="NormalInProgress" style="font-weight: normal; white-space: nowrap;"><%--  文件正在上传时显示的   --%><%-- <%# FormatCount(BytesRead) %>/<%# FormatCount(BytesTotal) %> <%# CountUnits %> --%><%# FormatRate(BytesPerSec) %>       <%# String.Format("{0:0%}", FractionComplete) %><%-- - 剩余时间<%# FormatTimeSpan(TimeRemaining) %> s --%>
</Upload:DetailsSpan>
<Upload:DetailsSpan id="chunkedInProgress" runat="server" WhenStatus="ChunkedInProgress" style="font-weight: normal; white-space: nowrap;"><%# FormatCount(BytesRead) %> <%# CountUnits %>at <%# FormatRate(BytesPerSec) %>- <%# FormatTimeSpan(TimeElapsed) %> elapsed
</Upload:DetailsSpan>
<Upload:DetailsSpan id="processing" runat="server" WhenStatus="ProcessingInProgress ProcessingCompleted" style="font-weight: normal; white-space: nowrap;"><%# ProcessingHtml %>
</Upload:DetailsSpan>
<Upload:DetailsSpan id="completed" runat="server" WhenStatus="Completed"><%--  文件上传完成时显示的   --%>文件大小: <%# FormatCount(BytesRead) %> <%# CountUnits %><%-- at <%# FormatRate(BytesPerSec) %> took <%# FormatTimeSpan(TimeElapsed) %> --%>
</Upload:DetailsSpan>
<Upload:DetailsSpan id="cancelled" runat="server" WhenStatus="Cancelled">上传已被取消
</Upload:DetailsSpan>
<Upload:DetailsSpan id="rejected" runat="server" WhenStatus="Rejected">禁止: <%# Rejection != null ? Rejection.Message : "" %>
</Upload:DetailsSpan>
<Upload:DetailsSpan id="error" runat="server" WhenStatus="Failed">错误: <%# Failure != null ? Failure.Message : "" %>
</Upload:DetailsSpan>

ProgressBar属性,一般修改他的高和宽,还有就是Inline="True"的属性。

这样,我们的事情就差不多完成了。 最终显示效果如下:

上传前

上传中

六、总结

国外的很多软件都是开源和免费的,而且很多的软件实用性很强,我们要善于去发现和挖掘现在已经存在的东西,不断地去学习,去深入地了解其内部的运行机理。这样我们才能够把别人的思想融汇在自己的大脑中,最终变成自己的东西。就像亚里士多德所说的一样,要想成功,就必须弄清基础问题。

由于本人所学知识有限,在文中有错或者不恰之处,还望各位高人指出纠正,我将感激不尽。

实现NeatUpload大文件上传和个性显示进度条相关推荐

  1. NeatUpload 大文件上传

    NeapUpload 作者地址:http://www.brettle.com/(抱着的那个小孩子蛮可爱的) 支持大文件上传的东东不少,可是不掏你钱包的寥寥无几了,找了好几天没找到其他合适的,AspUp ...

  2. 使用jQuery-File-Upload-master文件上传插件实现真实进度条

    2019独角兽企业重金招聘Python工程师标准>>> 首先要说明的是我是在Spring Boot和guns框架的基础上使用jQuery-File-Upload-master的插件来 ...

  3. wepy小程序聊天记录选择文件上传 wx.chooseMessageFile 带有进度条动画 支持文档打开 完整记录

    #需求:从聊天记录中选择文件,支持的文件格式doc, docx, pdf,同时支持上传的文档打开 文件选择与上传文件后展示模版代码: <van-cell title="从微信聊天记录中 ...

  4. 前端大文件上传解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  5. WebUploader大文件上传解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  6. 浏览器 批量大文件上传下载

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  7. NeatUpload:支持大文件上传 进度条

    NeatUpload:支持大文件上传 引用: NeatUpload可以让ASP.NET开发人员把磁盘上的文件通过流的方式上传并且可以监视上传进度 .它是开源的且在 Mono''s XSP/mod_mo ...

  8. 大文件上传 NeatUpload 控件

    因为要做一个大文件上传的功能,所以搜索了下.找到一个控件NeatUpload 而且这个空间是开源的 官网为http://www.brettle.com/neatupload 于是到官网去下了控件.它里 ...

  9. 开源的大文件上传组件NeatUpload™

    支持.net 1.1 .NET 2.0 这里是 live demo 很不容易发现的,在.net下面要找个开源的东西真是难也. 当然大文件上传有很多组件比如ABCUPLOAD SlickUpload不过 ...

  10. 大文件上传组件集成说明

    集成说明 Jimy 1.     部署说明 1.1.       复制文件夹"FileCenter"到应用程序目录下(即添加到应用程序中) 同时添加相关dll引用: MyBigFi ...

最新文章

  1. 详细通俗重点CRF层讲解
  2. python抓取简单网页_【Python3 爬虫】01_简单页面抓取
  3. cesium首次加载gltf模型成功
  4. LeetCode-数组-189. 旋转数组
  5. 机房收费系统--登录窗体
  6. python3.6与3.7有什么区别_Python3.6.6和Python3.7.0的坑
  7. 河北计算机科学与技术研究生,2021年河北工业大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  8. 并发执行变成串行_网易Java研发面试官眼中的Java并发——安全性、活跃性、性能...
  9. 细丝极恐的华为251事件
  10. LeetCode 2105. 给植物浇水 II(双指针)
  11. html轮播图原理,30_用js实现一个轮播图效果,简单说下原理
  12. redis的数据持久化方案
  13. navtab触底 小程序_微信小程序TAB切换效果
  14. 简单RAM存储器分析
  15. docker中使用idea部署运行项目(项目以镜像方式运行)
  16. 周记(2016-6-27 -- 2016-7-3)
  17. 数据挖掘:计算边的中介中心值 edge_betweenness value
  18. java能开发winform程序吗_Java进击C#——应用开发之WinForm环境
  19. 《通信原理》复习笔记4----第四章信道相关例题
  20. 利用ajaxSubmit()提交表单后,子窗口关闭,父窗口显示查询页面

热门文章

  1. 无法创建堆栈的防护页面 解决方法
  2. Win10校园网锐捷客户端犯病 可能有用的2个措施
  3. C语言|编程|判断素数
  4. mysql如何实现递归查询
  5. Python可视化深度图
  6. 夜曲编程Python入门课程Pro
  7. linux内核源码版本查看
  8. 2020你一直在苦找的Ps插件全在这!20款Photoshop实用插件分享
  9. 学习笔记12--Apollo开发平台
  10. unity visual effect Graph 1