0

我正在 c# 2010 的 asp.net 中开发项目。我正在尝试以 .zip 格式下载 mp3 文件。即使大小在 80 到 150 MB 之间,它也可以在本地 PC 中正常工作。它也适用于实时服务器,而 .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();
}

网页配置

<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();
}

谢谢

4

3 回答 3

3

如果您使用Response.TransmitFile(Server.MapPath(virtualpath)),它将关闭缓冲,您不必写入输出流。

于 2013-08-28T06:29:02.207 回答
0

尝试在 WriteFile 之前添加这一行:

Response.Buffer = false;
于 2013-08-28T06:24:57.660 回答
0

有一个 IIS 设置称为:

最大允许内容长度

可选的 uint 属性。

指定请求中内容的最大长度,以字节为单位。

默认值为 30000000。

猜猜您必须更改 IIS 设置以允许超过 30MB 的文件。

在 webconfig 中maxRequestLength以 kB 为单位!

打开文件 C:\Windows\System32\inetsrv\config\applicationHost.config 并找到以下行:

将 overrideModeDefault 属性设置为 Allow。所以现在该行应该如下所示:

<section name="requestFiltering" overrideModeDefault="Allow" />

于 2013-08-28T06:31:15.183 回答