当前位置:编程学习 > C#/ASP.NET >>

asp.net 上传大文件(100M)

兄弟咋整? --------------------编程问答-------------------- ????? --------------------编程问答-------------------- 这也太大了 --------------------编程问答-------------------- 看看思归大哥的

http://blog.joycode.com/saucer/archive/2004/03/16/16225.aspx --------------------编程问答-------------------- 用组件的比较多,自己写也行.

ASP.NET 应用中大文件上传研究

在项目中经常要用到了大文件上传,要上传的文件有100多m,于是研究现在国内使用的大文件上传的组件发现用的比较多的有两个控件AspnetUpload 2.0和Lion.Web.UpLoadModule,两个控件的方法是:利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据。Chris Hynes为我们提供了这样的一个方案(用HttpModule),该方案除了允许你上传大文件外,还能实时显示上传进度。

  Lion.Web.UpLoadModule和AspnetUpload 两个.NET组件都是利用的这个方案。

*******这个所谓的方案可以在这里找到:*******
http://blog.joycode.com/saucer/archive/2004/03/16/16225.aspx

  当上传单文件时,两个软件的方法是一样的,继承HttpModule

HttpApplication application1 = sender as HttpApplication;
HttpWorkerRequest request1 = (HttpWorkerRequest) ((IServiceProvider) HttpContext.Current).GetService(typeof(HttpWorkerRequest));
try
{
 if (application1.Context.Request.ContentType.IndexOf("multipart/form-data") <= -1)
 {
  return;
 }
 //Check The HasEntityBody
 if (!request1.HasEntityBody())
 {
  return;
 } 
 int num1 = 0;
 TimeSpan span1 = DateTime.Now.Subtract(this.beginTime);

 string text1 = application1.Context.Request.ContentType.ToLower();

 byte[] buffer1 = Encoding.ASCII.GetBytes(("\r\n--" + text1.Substring(text1.IndexOf("boundary=") + 9)).ToCharArray());
 int num2 = Convert.ToInt32(request1.GetKnownRequestHeader(11));
 Progress progress1 = new Progress();

 application1.Context.Items.Add("FileList", new Hashtable());

 byte[] buffer2 = request1.GetPreloadedEntityBody();
 num1 += buffer2.Length;

 string text2 = this.AnalysePreloadedEntityBody(buffer2, "UploadGUID");
 if (text2 != string.Empty)
 {
  application1.Context.Items.Add("LionSky_UpLoadModule_UploadGUID", text2);
 }
 bool flag1 = true;
 if ((num2 > this.UpLoadFileLength()) && ((0 > span1.TotalHours) || (span1.TotalHours > 3)))
 {
  flag1 = false;
 }
 if ((0 > span1.TotalHours) || (span1.TotalHours > 3))
 {
  flag1 = false;
 }
 string text3 = this.AnalysePreloadedEntityBody(buffer2, "UploadFolder");
 ArrayList list1 = new ArrayList();
 RequestStream stream1 = new RequestStream(buffer2, buffer1, null, RequestStream.FileStatus.Close, RequestStream.ReadStatus.NoRead, text3, flag1, application1.Context, string.Empty);
 list1.AddRange(stream1.ReadBody);
 if (text2 != string.Empty)
 {
  progress1.FileLength = num2;
  progress1.ReceivedLength = num1;
  progress1.FileName = stream1.OriginalFileName;
  progress1.FileCount = ((Hashtable) application1.Context.Items["FileList"]).Count;
  application1.Application["_UploadGUID_" + text2] = progress1;
 }
 if (!request1.IsEntireEntityBodyIsPreloaded())
 {
  byte[] buffer4;
  ArrayList list2;
  int num3 = 204800;
  byte[] buffer3 = new byte[num3];
  while ((num2 - num1) >= num3)
  {
   if (!application1.Context.Response.IsClientConnected)
   {
    this.ClearApplication(application1);
   }
   num3 = request1.ReadEntityBody(buffer3, buffer3.Length);
   num1 += num3;
   list2 = stream1.ContentBody;
   if (list2.Count > 0)
   {
    buffer4 = new byte[list2.Count + buffer3.Length];
    list2.CopyTo(buffer4, 0);
    buffer3.CopyTo(buffer4, list2.Count);
    stream1 = new RequestStream(buffer4, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
   }
   else
   {
    stream1 = new RequestStream(buffer3, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
   }
   list1.AddRange(stream1.ReadBody);
   if (text2 != string.Empty)
   {
    progress1.ReceivedLength = num1;
    progress1.FileName = stream1.OriginalFileName;
    progress1.FileCount = ((Hashtable) application1.Context.Items["FileList"]).Count;
    application1.Application["_UploadGUID_" + text2] = progress1;
   }
  }
  buffer3 = new byte[num2 - num1];
  if (!application1.Context.Response.IsClientConnected && (stream1.FStatus ==  RequestStream.FileStatus.Open))
  {
   this.ClearApplication(application1);
  }
  num3 = request1.ReadEntityBody(buffer3, buffer3.Length);
  list2 = stream1.ContentBody;
  if (list2.Count > 0)
  {
   buffer4 = new byte[list2.Count + buffer3.Length];
   list2.CopyTo(buffer4, 0);
   buffer3.CopyTo(buffer4, list2.Count);
   stream1 = new RequestStream(buffer4, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
  }
  else
  {
   stream1 = new RequestStream(buffer3, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
  }
  list1.AddRange(stream1.ReadBody);
  if (text2 != string.Empty)
  {
   progress1.ReceivedLength = num1 + buffer3.Length;
   progress1.FileName = stream1.OriginalFileName;
   progress1.FileCount = ((Hashtable) application1.Context.Items["FileList"]).Count;
   if (flag1)
   {
    progress1.UploadStatus = Progress.UploadStatusEnum.Uploaded;
   }
   else
   {
    application1.Application.Remove("_UploadGUID_" + text2);
   }
  }
 }
 byte[] buffer5 = new byte[list1.Count];
 list1.CopyTo(buffer5);
 this.PopulateRequestData(request1, buffer5);
}
catch (Exception exception1)
{
 this.ClearApplication(application1);
 throw exception1;
}
 

--------------------编程问答-------------------- 没办法.占个位子' --------------------编程问答-------------------- 有现成的组件 --------------------编程问答-------------------- 100MB ? asp.net 内置 http 上传不适合干这种事情, 

得组建 --------------------编程问答-------------------- 每次读1M +标签 上传,服务器重组。 --------------------编程问答-------------------- 占个坑。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark --------------------编程问答-------------------- 我K~~

上传这么大的东东干吗? --------------------编程问答-------------------- 顶!!! --------------------编程问答-------------------- 找组件 --------------------编程问答-------------------- ? --------------------编程问答-------------------- 用
 <asp:FileUpload CssClass="Input" runat="server" ID="filecontrol1" />

webconfig文件里,在SystemWeb下
定义
<system.web>
<httpRuntime maxRequestLength="2097150"></httpRuntime>
        </...> --------------------编程问答-------------------- mark --------------------编程问答-------------------- slickupload --------------------编程问答-------------------- webconfig文件里配置一下
<system.web>
<httpRuntime maxRequestLength="9999999"></httpRuntime>
        </...>
--------------------编程问答-------------------- kongwei521(蝶恋花雨) ※ ustbwuyi()  的方法 才是根本 否则 什么都是免谈! --------------------编程问答-------------------- mark --------------------编程问答-------------------- 如果是局域网,用自带的控件也行.

<httpRuntime
executionTimeout="500"
maxRequestLength="204800"  
useFullyQualifiedRedirectUrl="false"/>

如果是外网,最好是用 FTP上传, 如果网速不是很好的话,100M 够你喝N杯咖啡的时间了. --------------------编程问答-------------------- 网上有相关的组件的,具体我忘了,原来做过 --------------------编程问答-------------------- 用组件。自带的没办法。 --------------------编程问答-------------------- 100M??
也太大了吧
这个只能在web.config设置
<httpRuntime maxRequestLength="10240" executionTimeout="1024000"/> --------------------编程问答-------------------- <httpRuntime maxRequestLength="1024000" executionTimeout="3600000"/>

不好意思写错了 --------------------编程问答-------------------- kongwei521(蝶恋花雨) ( ) 信誉:100  2007-8-7 20:41:33  得分: 0  
 
 
   
webconfig文件里配置一下
<system.web>
<httpRuntime maxRequestLength="9999999"></httpRuntime>
        </...>

一看就知道没试过,可能设这么大么?


  
 
--------------------编程问答-------------------- 呵呵,前一阵子才弄了一个。我的可以上传1G
upload.9tdj.com.cn --------------------编程问答-------------------- 有源码,喜欢的话。留email. --------------------编程问答-------------------- 基本上就是5楼的兄弟说的。 --------------------编程问答-------------------- 需要在web。config文件里配置一下maxRequestLength 最大为4g(4096k)

<system.web>
<httpRuntime maxRequestLength="4096000"></httpRuntime>
        </...>

如果你使用了fileUpload也需要在里面修改一个值 那个的单位是byte 好像 

上传100m以上的文件是没有问题的 --------------------编程问答-------------------- http://www.lionsky.net/MyWebSite/DownSoft/List.Aspx?ID=225
去这个地方下载一个,自己研究研究就行了,别忘记给我分啊。。。 --------------------编程问答-------------------- ##########################################################################

上传文件是不是都得占用内存的?

有没有像下载软件一样, 当上传到多少时就自动存入磁盘. (有点像断点续传 ?_? )

##########################################################################

--------------------编程问答-------------------- mark --------------------编程问答-------------------- 这个组件有很多,基本就是用HttpWorkerRequest类来实现,边传边写,不过各个组件效率也是差很多的
看看这个:http://www.cnblogs.com/MaxIE/archive/2007/04/11/708255.aspx --------------------编程问答-------------------- 切割开来上传,大化小。就是具体实现过程要好好考虑一下啊。 --------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 有可以发
liubinstud@hotmail.com --------------------编程问答-------------------- 也发我一份吧,谢谢!
qyhxx@163.com --------------------编程问答-------------------- 大文件上传FTP是真道。 --------------------编程问答-------------------- 普通的大文件大文件上传服务器的资源100%占用,除非用流传递或者控制服务器资源最大占用值 
可以使用 NickLee.Common.SlickUpload
<slickUpload>
    <uploadLocationProvider provider="File" location="~/upload" existingAction="Overwrite" fileNameMethod="Custom" customFileNameHandler="FortuneWeb.LetterFolderCustomFileNameGenerator, FortuneWeb"/>
  </slickUpload>

参考下载地址:
http://www.cnblogs.com/mail-ricklee
下载最新的资源包,相信还有其他惊喜,里面的asp.net资源库 --------------------编程问答-------------------- 我把孟子E章的WebService上传大文件改成了类
/// <summary>
   /// 上传文件.大柄修改
   /// </summary>
   /// <param name="path">文件保存位置</param>
   /// <param name="oFile">文件</param>
   /// <returns></returns>
    public string UpLoadFile(string path, System.Web.HttpFileCollection oFile)
    {
        string rStr = "";
        //首先得到上载文件信息和文件流
        //System.Web.HttpFileCollection oFile = System.Web.HttpContext.Current.Request.Files;
        if (oFile.Count < 1)
        {
            return "请选择文件";
        }
        string filePath = oFile[0].FileName;
        if (filePath == null || filePath == "")
        {
            return "请选择文件!";
        }
        string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);

        try
        {
            ///处理上载的文件流信息
            ///
            byte[] b = new byte[oFile[0].ContentLength];
            Stream fs;
            //InLoadFiles oLoad = new InLoadFiles();
            //UpLoad u = new UpLoad();
            fs = (Stream)oFile[0].InputStream;

            fs.Read(b, 0, oFile[0].ContentLength);

            rStr = UpLoadStream(b, fileName, path);

            //调用Web Services的UploadFile方法进行上载文件。
            //Response.Write(oLoad.UpLoadFile(b, fileName, ddlCategory.SelectedValue.ToString()));
            //Response.Write("<a href='javascript:history.go(-1)'>返回</a>");
            //Response.End();
        }
        catch (Exception error)
        {
            rStr = error.Message;
            //Response.Write(error.Message);
            //Response.End();
        }
        return rStr;
    }   
    /// <summary>
    /// 上传文件流.大柄修改
    /// </summary>
    /// <param name="fs">流文件</param>
    /// <param name="fileName">文件名称</param>
    /// <param name="requestPath">保存路径</param>
    /// <returns></returns>
    protected string UpLoadStream(byte[] fs, string fileName, string requestPath)
    {
        try
        {
            string oldName = System.IO.Path.GetFileName(fileName);
            string expendName = System.IO.Path.GetExtension(oldName);
            string newName = DateTime.Now.ToString().Replace(" ", "").Replace(":", "").Replace("-", "").Replace("/", "");
            ///定义并实例化一个内存流,以存放提交上来的字节数组
            ///
            MemoryStream m = new MemoryStream(fs);
            ///定义实际文件对象,保存上载的文件。
            FileStream f = new FileStream(requestPath + newName + expendName, FileMode.Create);
            ///把内内存里的数据写入物理文件
            m.WriteTo(f);
            m.Close();
            f.Close();
            f = null;
            m = null;
            return requestPath + newName + expendName;
        }
        catch (Exception error)
        {
            return error.Message;
        }
    }
然后修改web.config
<httpRuntime maxRequestLength="4096000"></httpRuntime>我上传200M也没有问题,不过就是消耗系统资源太多了
--------------------编程问答-------------------- 用NeatUpload这个控件,最近我做了个电影网站,用它上传电影都可以。 --------------------编程问答-------------------- 我也在研究这个问题…… --------------------编程问答-------------------- 设置web.config 就ok了 --------------------编程问答-------------------- 建议用ftp --------------------编程问答-------------------- 不要说附件大,没有几个能往正题上答的,人家头号就说明要传这么大的。我以前也问过同样的问题,也同样是没有结果,回答的都很离谱。我曾做过一个程序,要上传500M左右的视频,当时好像用的是Flash控件上传,楼主可以找找,搜索FlashUpload就行了,很好用,并且速度也很快! --------------------编程问答-------------------- FlashUpload不错,刚测试了一下.不过cpu有瞬间达到100%的情况,不过基本还是不错地 --------------------编程问答--------------------
引用 29 楼 china_kungfu 的回复:
有源码,喜欢的话。留email.


给我发一个,谢谢!
yuansy24@gmail.com --------------------编程问答-------------------- 在web.config中设置:

<system.web>
<httpRuntime 
maxRequestLength="40960"  //指定输入流缓冲阈值限制(单位为KB),即上传的最大限制,默认4M
executionTimeout="3600" //允许执行请求的最大秒数, 只有当调试属性compilation= False时,此超时属性才适用
appRequestQueueLimit="1000"/> //指定应用程序排队的请求的最大数目。当自由线程不够时,将对请求进行排队。当排队队列超出了设定值时,将显示“503 - 服务器太忙”错误信息拒绝传入的请求。 
<compilation debug="true" defaultLanguage="c#">
 </system.web>
--------------------编程问答-------------------- 改WEBCONFIG的忘了 直接传100M的话 传的人多几个 马上就把服务器的内存耗光了 需要设置缓存 最好还是分块传  --------------------编程问答-------------------- 使用上传控件 radupload,能上传几百兆,而且稳定,有进度条
--------------------编程问答-------------------- 在<system.web>节点下配置上传文件的大小就行啦
    <!-- 配置上传压缩文件的大小(资料上传) -->
    <httpRuntime  maxRequestLength="51200" executionTimeout="600" />//值,根据需要自己设置 --------------------编程问答-------------------- 楼主到网上搜一下 
WebbUpload.zip 
这个是某高人做的例子,完整的,我就是根据他的解决问题了,上传1G没啥问题
--------------------编程问答-------------------- 大文件上传FTP是真道。还是可以参考参考

WebbUpload.zip  
倒没有用过,可以网上查查。 --------------------编程问答-------------------- marker --------------------编程问答-------------------- 每天上线回答一下得个分你知道的 --------------------编程问答-------------------- --------------------编程问答-------------------- http://www.51ascx.com/41.html
给你的控件吧,好用,还有进度条 --------------------编程问答-------------------- 太有才了 .. --------------------编程问答-------------------- http://topic.csdn.net/u/20100928/17/7c1e409c-6219-4b13-81e1-8ff1e0534ac2.html?42718
楼主去看我发的贴啊。。。 --------------------编程问答-------------------- Mark
为了生活迟早要用到 --------------------编程问答-------------------- 怎么使用neatupload上传工具上传大于10Mb的文件,我是虚拟主机,改主机配置或者web.config就不用废话了,上传的代码我也有,现在仅需要解决方法的代码! --------------------编程问答-------------------- 用第三方插件 。 --------------------编程问答-------------------- 用5楼的方法 --------------------编程问答--------------------
引用楼主  的回复:
兄弟咋整?

网上有一个Web大文件断点续传控件:http://www.cnblogs.com/xproer/archive/2012/05/29/2523757.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度:

文件MD5值计算完毕

服务器根据MD5检测是否存在相同文件

续传文件

从服务器加载文件列表

文件上传中

文件上传完毕

上传文件夹

与Discuz!X2整合-后台安装断点续传控件

与Discuz!X2整合-后台启用断点续传控件

与Discuz!X2整合-后台断点续传控件启用成功

与Discuz!X2整合-前台发帖页面

与Discuz!X2整合-上传


页面调用示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>
    <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>
    <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>
    <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>
    <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>
    <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>
    <script language="javascript" type="text/javascript">
     var cbItemLast = null;
     var cbMgr = new CombinBoxMgr();

     $(document).ready(function()
     {
     cbMgr.LoadInControl("FilePanel");
     cbMgr.Init();
     });
    </script>
</head>
<body>
<div id="FilePanel"></div>
</body>
</html>

资源下载:
CAB安装包
开发文档
ASP.NET-ACCESS示例
ASP.NET-SQL2005示例
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP-MySQL-UTF8示例
--------------------编程问答-------------------- 1、下载neatupload的免费版本http://www.brettle.com/neatupload#Download; 

  2、访问地址http://www.brettle.com/Demo.aspx查看相应的Demo示例; 

  3、将Brettle.Web.NeatUpload.dll添加到工具箱;右键——>选择项——>选择文件加入 

  4、将\NeatUpload-1.2.32下的NeatUpoad文件夹复制到项目根目录; 

  5、在Web.config的system.web节点中写入下面的配置 
如果要显示进度条,在system.web节点中应加入如下代码
<httpModules>
 
            <!--如果不加这httpmodules,进度条不显示-->
 
           <add name="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload"/>
 
        </httpModules>
    
   6,在网站的bin目录下应加入对neatupload的引用,建立webform,托个上传控件过来就有了


 web.config配置
 
1.在<configSections></configSections>节内加入:
 
      <section name="neatUpload" allowLocation="true" type="Brettle.Web.NeatUpload.ConfigSectionHandler, Brettle.Web.NeatUpload"/>
 
2.在<configuration></configuration>也就是配置文件的任一地方加入,当然不要再其他例如<system.web>这样的节里(我是在</configSection>后面紧接加入的,相对于一级节点<configuration>  <neatUpload>是2级节点):
 
  <neatUpload  useHttpModule="true" maxNormalRequestLength="2097151" maxRequestLength="2097151"           defaultProvider="FilesystemUploadStorageProvider">
     <providers>
       <add name="FilesystemUploadStorageProvider" type="Brettle.Web.NeatUpload.FilesystemUploadStorageProvider, Brettle.Web.NeatUpload"/>
     </providers>
   </neatUpload>
 
3.在<system.web></system.web>节内加入:
 
<httpRuntime maxRequestLength="2097151" executionTimeout="3600" useFullyQualifiedRedirectUrl="true" />
 
其中executiontimeout是用来控制http请求时间的,如过不设置默认是90秒,大文件上传过程会被终止
 
4.加入<system.webServer></system.webServer>节
 <system.webServer>
     <modules>
       <!--上传大文档-->
       <add name="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload" preCondition="managedHandler"/>
     </modules>
     <security>
       <requestFiltering>
         <!-- Increased maxAllowedContentLength from default of 300MB. -->
         <requestLimits maxAllowedContentLength="2147483648" ></requestLimits>
       </requestFiltering>
     </security>
     <validation validateIntegratedModeConfiguration="false"/>
   </system.webServer>
 
其中,如果不配置<security></security>大文件上传 “进度条”出现但不会有进度,因为maxallooedcontentlenght因为考虑到安全因素被限制


前台代码 
    <Upload:ProgressBar ID="ProgressBar1" runat="server" Inline="True"

        Triggers="" />

      <br />

    <Upload:InputFile ID="AttachFile" runat="server" />

    <br />

    <br />

<asp:Button ID="BtnUP" runat="server" onclick="BtnUP_Click" Text="上 传" />


后台代码
        protected void BtnUP_Click(object sender, EventArgs e)

        {

            if (AttachFile.HasFile)

            {

                string FileName = this.AttachFile.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);//合并两个路径为上传到服务器上的全路径

                AttachFile.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite);

                string url = "UpLoads/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ExtenName; //文件保存的路径

                float FileSize = (float)System.Math.Round((float)AttachFile.ContentLength / 1024000, 1); //获取文件大小并保留小数点后一位,单位是M

            }

    }


注:
配置好的web.config
<?xml version="1.0"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
<configSections>
<section name="neatUpload" allowLocation="true" type="Brettle.Web.NeatUpload.ConfigSectionHandler, Brettle.Web.NeatUpload"/>
</configSections>
<neatUpload useHttpModule="true" maxNormalRequestLength="2097151" maxRequestLength="2097151" defaultProvider="FilesystemUploadStorageProvider">
<providers>
<add name="FilesystemUploadStorageProvider" type="Brettle.Web.NeatUpload.FilesystemUploadStorageProvider, Brettle.Web.NeatUpload"/>
</providers>
</neatUpload>
<system.web>
    <httpModules>

      <!--如果不加这httpmodules,进度条不显示-->

      <add name="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload"/>

    </httpModules>

    <httpRuntime maxRequestLength="2097151" executionTimeout="3600" useFullyQualifiedRedirectUrl="true" />
<compilation debug="false" targetFramework="4.0">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>
</system.web>
  <system.webServer>
    <modules>
      <!--上传大文档-->
      <add name="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload" preCondition="managedHandler"/>
    </modules>
    <security>
      <requestFiltering>
        <!-- Increased maxAllowedContentLength from default of 300MB. -->
        <requestLimits maxAllowedContentLength="2147483648" ></requestLimits>
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>
</configuration>


以下未验证:
默认的进度条的样式是可以修改的。
 
主要修改default.css、Progress.aspx及ProgressBar控件的属性。
 


 
 
default.css修改部分:
 





.ProgressDisplay .ProgressBar {
 
      background-color: #D7E5F7;
 
      background-image: url("/11.gif"); /*进度条背景图片*/
 
      height:20px;
 
}
 
#normalInProgress{
 
     color: Red;      /*进度条字体颜色*/
 
}
 
#completed{
 
     color:Blue;   /*上传完成的字体颜色*/
 
}
 
 
 


Progress.aspx是显示进度条的核心文件,相关数据的显示都在里面。
 





<td id="barTd" >
 
              <div id="statusDiv" runat="server" class="StatusMessage"> 

 
 
                   <Upload:DetailsSpan id="normalInProgress" runat="server" WhenStatus="NormalInProgress" style="font-weight: normal; white-space: nowrap;">                                <%--  正在上传时显示的   --%>
 
                   <%-- <%# FormatCount(BytesRead) %>/<%# FormatCount(BytesTotal) %> <%# CountUnits %> --%>
 
                  (<%# String.Format("{0:0%}", FractionComplete) %>) at <%# FormatRate(BytesPerSec) %>
 
                   <%-- - <%# FormatTimeSpan(TimeRemaining) %> left        --%> 

                   </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="completed" runat="server" WhenStatus="Completed">
 
                       <%--  上传完成时显示的   --%>
 
完成了: <%# FormatCount(BytesRead) %> <%# CountUnits %>
 
                       at <%# FormatRate(BytesPerSec) %>
 
                       took <%# FormatTimeSpan(TimeElapsed) %>
 
                   </Upload:DetailsSpan>
 
                   <Upload:DetailsSpan id="cancelled" runat="server" WhenStatus="Cancelled">
 
                       Cancelled!
 
                   </Upload:DetailsSpan>
 
                   <Upload:DetailsSpan id="rejected" runat="server" WhenStatus="Rejected">
 
                       Rejected: <%# Rejection != null ? Rejection.Message : "" %>
 
                   </Upload:DetailsSpan>
 
                   <Upload:DetailsSpan id="error" runat="server" WhenStatus="Failed">
 
                       Error: <%# Failure != null ? Failure.Message : "" %>
 
                   </Upload:DetailsSpan>
 
                   <Upload:DetailsDiv id="barDetailsDiv" runat="server" UseHtml4="true"
 
                        Width='<%# Unit.Percentage(Math.Floor(100*FractionComplete)) %>' class="ProgressBar"></Upload:DetailsDiv> 
 
              </div>
 
         </td>
 
用这个吧,多大的设置下都可以,传G的文件应该不成问题 --------------------编程问答-------------------- 如果仅仅是在ie内核的浏览器下运行,可以考虑用一些断点续传的客户端插件来传,优点是服务器内存和cpu消耗小,还可以续传。
http://blog.csdn.net/onetwofree/article/details/7751127 --------------------编程问答-------------------- C#.net文件批量上传swfupload方法最大可以上传2G单个文件,多文件可支持176个文件
http://www.ok22.org/art_detail.aspx?id=232 --------------------编程问答-------------------- http://blog.zhaojie.me/2008/02/aspnet-upload.html
http://www.infoq.com/cn/news/2008/01/handling-large-uploads

这两篇一定要看,了解asp。net 文件上传现状 --------------------编程问答--------------------
Mark!


补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,