几个方法:
- 修改文件上传大小的限制
- 以文件形式保存到服务器
- 转换成二进制字节流保存到数据库
- 将二进制通过循环的方式写入磁盘
一、修改文件上传大小的限制
通过对web.config和machine.config文件进行修改.
对网站根目录下的web.config进行修改:
原:
<httpRuntime executionTimeout="90" maxRequestLength="800000" useFullyQualifiedRedirectUrl="false"/>
对executionTimeout进行修改,可以修改超时时间.对maxRequestLength进行修改,可以修改上传文件的上限.
对机器上Microsoft.NETFrameworkv1.1.4322CONFIGmachine.config进行修改:
原:
<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />对executionTimeout进行修改,可以修改超时时间.对maxRequestLength进行修改,可以修改上传文件的上限.
还可以(没测试过,不知道是否有用):
在“服务”里关闭 iis admin service 服务。
找到 C:WINDOWSsystem32inetsrv下的 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(); } } }
附:
- 在IIS中调大一些脚本超时时间,操作方法是: 在IIS的“站点或虚拟目录”的“主目录”下点击“配置”按钮,设置脚本超时时间为:300秒 (注意:不是Session超时时间)
- 解决SERVER 2003无法下载超过4M的附件问题
在“服务”里关闭 iis admin service 服务。
找到 windowssystem32inetsrv 下的 metabase.xml 文件。
找到 AspBufferingLimit 把它修改为需要的值(可修改为20M即:20480000)
存盘,然后重启 iis admin service 服务。