【问题标题】:mp3 files not getting downloaded?mp3文件没有被下载?
【发布时间】:2015-05-30 05:46:06
【问题描述】:

我用c#写了下面几行代码

 private void DownloadFile(byte[] myData, string Name)
    {
        Response.Expires = 0;
        Response.Clear();
        string ext= System.IO.Path.GetExtension(Name);
        switch(ext)
        {
            case ".mp3":
                 Response.ContentType = "audio/mpeg";
                break;
            default:
            Response.ContentType = "Application/octet-stream";
            break;
        }
        Response.AddHeader("content-length", myData.Length.ToString());
        Response.AddHeader("Content-Disposition", "attachment; filename=" + Name);
        try
        {
            Response.BinaryWrite(myData);
        }
        catch { }
        Response.Flush();
        Response.End();
    }

现在的问题是,当我们点击 mp3 文件下载时,它是直接播放的。我希望它应该下载它。我也想下载所有类型的文件。

【问题讨论】:

  • 该 MIME 类型是否存在于您的 IIS 服务器的类型列表中?
  • 不知道怎么查
  • @freefaller 因为内容类型是明确设置的,这有关系吗?
  • 我开始怀疑自己@Marc
  • @user - 正如 Marc 所说,直接从代码传输文件可能不会有任何区别 - 但值得检查以防万一。有一个look here 的说明

标签: c# asp.net c#-4.0 mime-types


【解决方案1】:

我为此苦苦挣扎了很长时间,但最终解决了这个难题。使用 Response.WriteFile。您可以使用 Response.Flush 跟随它,但我发现这是不必要的。 .mp3 文件不需要额外的标题。就我而言,.mp3 文件位于根目录下的文件夹中。还有一个好处:使 .mp3 下载适用于智能手机(这是我的困境)的关键因素是使用 Response.End,并通过发送回 Response.StatusCode = 200 告诉移动设备下载已完成。

string FilenameMP3 = "~/someFolder/xyz.mp3";
string headerFilename = Filename.Substring(Filename.IndexOf("/") + 1);
Response.AppendHeader("Content-Disposition", String.Concat("attachment;filename=\"", headerFilename, "\""));
Response.ContentType = "audio/mpeg";
try
{
    Response.WriteFile(Filename, true);
    Response.End();
}
finally
{
     Response.StatusCode = 200;
     Response.Close();
}

【讨论】:

    【解决方案2】:

    您所拥有的应该就足够了,假设您添加的标头在传输过程中没有被剥离/损坏(很容易通过 Fiddler 或类似工具进行检查)。

    由于您不希望浏览器解释这些数据,一个实用的选择可能是简单地将所有数据作为“应用程序/八位字节流”发送,而不管内容如何。虽然“附件”处置应该足够了,但在 RFC 2616, 19.5.1(“内容处置”)中明确指出了这种方法:

    如果此标头用于内容类型为 application/octet-stream 的响应中,则暗示用户代理不应显示响应,而是直接输入“将响应另存为...”对话框。

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 2017-07-04
      • 2013-01-09
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多