1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 实现NeatUpload大文件上传和个性显示进度条

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

时间:2022-11-22 14:18:38

相关推荐

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

一、概述

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

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

首先,我们去官网下载软件,地址:

NeatUpload:/ 我下载的是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.bine(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"的属性。

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

上传前

上传中

六、总结

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。