我正在开发asp.net,c#2010中的项目。我试图以.zip格式下载mp3文件。它在本地PC上工作正常,即使大小介于80到150 MB之间。它也可以在实时服务器上运行,而.zip文件大小介于10 to 20 MB
之间,但现在我已经上传了80 to 150 MB
之间的文件,它不起作用,并且不会给加载页面带来任何错误。页面加载可能是因为我在web.config
文件中设置了最大超时。
正在下载代码
if (File.Exists(virtualPath))
{
FileInfo file = new FileInfo(virtualPath);
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment;filename=\"" + Path.GetFileName(AlbumName) + "\"");
Response.AppendHeader("content-length", file.Length.ToString());
Response.WriteFile(virtualPath);
//Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
的Web.config
<system.web>
<customErrors mode="Off"></customErrors>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2000000000" executionTimeout="999999"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2000000000" />
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
不知道是什么原因。请帮我解决这个错误。如果您有其他解决方案,那就太棒了。
修改
if (File.Exists(virtualPath))
{
FileInfo file = new FileInfo(virtualPath);
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment;filename=\"" + Path.GetFileName(AlbumName) + "\"");
Response.AppendHeader("content-length", file.Length.ToString());
Response.Buffer = false;
Response.TransmitFile(virtualPath);
//Response.WriteFile(virtualPath);
//Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
由于
答案 0 :(得分:2)
如果您使用Response.TransmitFile(Server.MapPath(virtualpath))
,它将关闭缓冲,您不必写入输出流。
答案 1 :(得分:0)
尝试在WriteFile之前添加此行:
Response.Buffer = false;
答案 2 :(得分:0)
有一个名为:
的IIS设置maxAllowedContentLength
可选的uint属性。
指定请求中内容的最大长度,以字节为单位。
默认值为30000000。
猜猜您必须更改IIS设置以允许文件超过30MB。
在webconfig中,maxRequestLength
以kB为单位测量!
打开文件 C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config并找到 行:
将overrideModeDefault属性设置为Allow。所以现在该行应该 看起来像:
<section name="requestFiltering" overrideModeDefault="Allow" />