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 服务。

你可能感兴趣的:(asp.net)