Asp.Net--上传大文件(页面超时)

几个方法:

    1. 修改文件上传大小的限制
    2. 以文件形式保存到服务器
    3. 转换成二进制字节流保存到数据库
    4. 将二进制通过循环的方式写入磁盘

一、修改文件上传大小的限制

通过对web.config和machine.config文件进行修改.

对网站根目录下的web.config进行修改:

原:

<httpRuntime executionTimeout="90" maxRequestLength="800000" useFullyQualifiedRedirectUrl="false"/>

对executionTimeout进行修改,可以修改超时时间.对maxRequestLength进行修改,可以修改上传文件的上限.

对机器上Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config进行修改:

原:

	<httpRuntime 
            executionTimeout="90"
            maxRequestLength="4096"
            useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8"
            minLocalRequestFreeThreads="4"
            appRequestQueueLimit="100"
            enableVersionHeader="true"
        />

对executionTimeout进行修改,可以修改超时时间.对maxRequestLength进行修改,可以修改上传文件的上限.

还可以(没测试过,不知道是否有用):

        在“服务”里关闭 iis admin service 服务。
   找到 C:\WINDOWS\system32\inetsrv下的 metabase.xml 文件。
   找到 ASPMaxRequestEntityAllowed 把它修改为需要的值(可修改为20M即:20480000)
   存盘,然后重启 iis admin service 服务。

 

前提方法:

    private string GetFilePath()
    {
        string Folder = Server.MapPath("temp");
        string file = FileUpload1.FileName;
        string RealFile = Folder + "\\" + file;       

        return RealFile;
    }
 

二、以文件形式保存到服务器

    protected void Upload_Click(object sender, EventArgs e)
    {
        string filename = FileUpload1.FileName;
        FileUpload1.SaveAs(Server.MapPath("source/") + filename);

    }
    protected void Button4_Click(object sender, EventArgs e)
    {
        HttpPostedFile posted = FileUpload1.PostedFile;
        string RealFile = GetFilePath();
        posted.SaveAs(RealFile);        
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string filepath = GetFilePath();
        byte[] b = FileUpload1.FileBytes;

        FileStream fs = new FileStream(filepath, FileMode.Create);
        fs.Write(b, 0, b.Length);
        fs.Close();
    }

 三、转换成二进制字节流保存到数据库

    protected void Button3_Click(object sender, EventArgs e)
    {
        HttpPostedFile posted = FileUpload1.PostedFile;
        byte[] b = new byte[posted.ContentLength];
        posted.InputStream.Read(b, 0, b.Length);
        /*
         * 将数据写入数据库
          */
    }

 

四、将二进制以循环的方式写入磁盘

    protected void Button3_Click(object sender, EventArgs e)
    {
        string filepath = GetFilePath();
        FileStream stream = new FileStream(filepath, FileMode.Create);

        int length = 20480;
        byte[] b = new byte[length];
        try
        {
            int size = FileUpload1.PostedFile.InputStream.Read(b, 0, length);

            while (size > 0)
            {
                stream.Write(b, 0, size);
                size = FileUpload1.PostedFile.InputStream.Read(b, 0, length);
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message + "<br/>");
            Response.Write(ex.InnerException.Message);
        }
        finally
        {
            if (stream != null)
            {
                stream.Flush();
                stream.Close();
            }
        }        
    }

 

附:

    1. 在IIS中调大一些脚本超时时间,操作方法是: 在IIS的“站点或虚拟目录”的“主目录”下点击“配置”按钮,设置脚本超时时间为:300秒 (注意:不是Session超时时间)
    2. 解决SERVER 2003无法下载超过4M的附件问题
      在“服务”里关闭 iis admin service 服务。
      找到 windows\system32\inetsrv\ 下的 metabase.xml 文件。
      找到 AspBufferingLimit 把它修改为需要的值(可修改为20M即:20480000)
      存盘,然后重启 iis admin service 服务。
posted @ 2015-05-17 14:32  海绵宝  阅读(428)  评论(0编辑  收藏  举报