ASP.NET下传大文件

ASP.NET上传大文件
上网下一个neatupload 1.2.32的压缩包:(附压缩包)
准备:
  将压缩包中的Brettle.Web.NeatUpload.dll、Brettle.Web.NeatUpload.HashedInputFile.dll、Hitone.Web.SqlServerUploader.dll三个文件放到项目的Bin目录下(不确定这三个文件是否全都要用上,不管了,都用是没错的),然后对这三个文件添加引用.
  将压缩包中的NeatUpload文件夹复制到项目的根目录下.
  添加工具箱->选择项->浏览->选择刚复制的Brettle.Web.NeatUpload.dll文件,工具箱中就将添加相应的工具了.我测试用了两个:InputFile和ProgressBar.
修改Web.config文件
<configuration>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="neatUpload" type="Brettle.Web.NeatUpload.ConfigSectionHandler, Brettle.Web.NeatUpload" allowLocation="true" />  <!-- NeatUpload添加配置(第一处) -->
    </sectionGroup>
</configuration>
<system.web>
    <httpModules>
        <add name="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload" /> <!-- NeatUpload添加配置(第二处) -->
    </httpModules>
</system.web>
测试:
前台:
<head runat="server">
    <title>上传测试</title>
    <script type="text/javascript">
        function ToggleVisibility(id,type){
            var 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>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <Upload:InputFile ID="AttachFile" runat="server" />
        <asp:Button ID="Upload" runat="server" Text="Upload" OnClientClick="ToggleVisibility('ProgressBar','on')" OnClick="Upload_Click" />
        <div id="ProgressBar">
            <upload:progressbar ID="pbProgressBar" runat='server' Inline="true" Width="280px" Height="50px">
</upload:progressbar>
        </div>
    </div>
    </form>
</body>
后台:
protected void Upload_Click(object sender, EventArgs e)
{
      string FileName = this.AttachFile.FileName;//获取上传文件的全路径
      string ExtenName = System.IO.Path.GetExtension(FileName);//获取扩展名
      string SaveFileName = System.IO.Path.Combine(Request.PhysicalApplicationPath + "/UpLoadFiles/DownLoads", DateTime.Now.ToString("yyyyMMddhhmm") + ExtenName);//合并两个路径为上传到服务器上的全路径
      if (this.AttachFile.ContentLength > 0)
      {
          try
          {
               this.AttachFile.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite);
          }
          catch (Exception ex)
          {
               throw ex;
          }
     }
}
运行页面,OK.
ASP.NET下传大文件
测试这种方法可行,如何进行多个文件上传呢,进一步测试:
前台:
<script type="text/javascript">
function ToggleVisibility(classNameOne,type){
    var el = [],allElements = document.getElementsByTagName('div');
    for (var i=0; i< allElements.length; i++ )
    {
        if (allElements[i].className == classNameOne ) {
            el.concat = allElements[i];
        }
    }
    for (var j=0;j<el.length;j++)
    {
        if (el[j].style){
            if (type=='on'){
                el[j].style.display='block';
            }
            else{
                el[j].style.display='none';
            }
        }
        else{
            if (type=='on'){
                el[j].display='block';
            }
            else{
                el[j].display='none';
            }
        }
    }
}
</script>
......
<tr>
<td>上传文件包(供阅读使用 .zip包)</td>
<td>
<Upload:InputFile ID="InputFile2" runat="server" />  
<div class="ProgressBar"><Upload:ProgressBar ID="ProgressBar1" runat='server'></Upload:ProgressBar></div>             
</td>
</tr>
<tr>
<td>上传文件包(供下载使用 .rar包)</td>
<td>
<Upload:InputFile ID="InputFile1" runat="server" />
</td>               
</tr>
后台:
//处理供下载的文件(上传到DownLoads文件夹中)
string BookDownFileName = "#";
string FileName = this.InputFile1.FileName;//获取上传文件的全路径
string ExtenName = System.IO.Path.GetExtension(FileName);//获取扩展名
if (sysData.GetExtend(FileName) != "rar")
{
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('上传的文件必须是.rar的压缩包!');</script>");
    return;
}
string NewFileName = DateTime.Now.ToString("yyyyMMddhhmm") + ExtenName;
BookDownFileName = "/UpLoadFiles/DownLoads/" + NewFileName;
string SaveFileName = System.IO.Path.Combine(Request.PhysicalApplicationPath + "/UpLoadFiles/DownLoads", NewFileName);//合并两个路径为上传到服务器上的全路径
if (this.InputFile1.ContentLength > 0)
{
    try
    {
        this.InputFile1.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
//电子杂志(在线阅读使用)
string InputMagazineName = this.InputFile2.FileName;
if (sysData.GetExtend(InputMagazineName) != "zip")
{
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('上传的杂志必须是扩展名为.zip的压缩包!');</script>");
    return;
}
string FolderName = InputMagazineName.Substring(0, InputMagazineName.LastIndexOf("."));
string MagazineName = FolderName + ".zip";
if (this.InputFile2.ContentLength>0)
{
    try
    {
        this.InputFile2.MoveTo( System.IO.Path.Combine(Request.PhysicalApplicationPath + "/UpLoadFiles", InputMagazineName), Brettle.Web.NeatUpload.MoveToOptions.Overwrite);
    }
    catch (Exception ex)
    {
throw ex;
    }
}
运行页面,Ok.
ASP.NET下传大文件
问题:项目的中上传进度条会在一个弹出的小窗口中显示,没找到修改CSS的地方.现就是上传到服务器后,弹出的进度条小窗口不会自动关闭.
参考:http://www.cnblogs.com/langlang/archive/2009/12/11/1621730.html