【问题标题】:Safari and downloading file issueSafari和下载文件问题
【发布时间】:2023-04-09 18:03:01
【问题描述】:

我有一个网站,可以让用户下载 mp3 文件。代码sn-p(部分)如下:

Response.Clear();
Response.AppendHeader("Content-Disposition:", "attachment; filename=mike.mp3");
Response.AppendHeader("Content-Length", "1000");
Response.ContentType = "audio/mpeg3";

一位客户抱怨他无法在 Mac 10.4.11 上的 Safari 上下载此文件。 (它只是在页面上呈现 mp3 文件)因此,我下载了适用于 Windows 的 Safari,但无法重现该问题。那么,我猜 Windows 版 Safari 和 Mac 版 Safari 有区别吗?

我没有 Mac 机器。如何解决此问题?

【问题讨论】:

  • 可能是标题名称后面的冒号?
  • @Messa - 我假设您的意思是 Content-Disposition 之后的冒号。我已将其删除,但我不确定如何在部署更改之前对其进行测试。

标签: asp.net windows macos safari


【解决方案1】:

可能是标题名称后面的冒号?

是的,那当然不应该在那里。

另外,MP3 的正确 MIME 媒体类型是 audio/mpeg。此类型涵盖紧密相关的 MPEG layer-1、layer-2 (.mp2) 和 layer-3 (.mp3) 格式(但不包括完全不同的 MPEG-4 AAC)。

浏览器无法识别非标准(未向 IANA 注册)audio/mpeg3 类型,因此任何人都可以猜测他们会选择如何处理它们。不幸的是,它通常涉及一些令人毛骨悚然的内容嗅探猜测,当浏览器看到他们认为是一种(错误)文件类型证据的虚假字符串时,这可能会导致非常不恰当的结果。

【讨论】:

  • 有趣。我认为 mp3 文件映射到音频/mpeg3 的 mime 类型。我将进行此更改,但不确定如何测试这是否适用于 Mac Safari 版本的浏览器。有什么见解吗?
  • 也许一些 StackOverflow 访问者有 Mac :)
【解决方案2】:

有趣。我没有 asp.net,所以我创建了这个 Python Web 应用程序:

#!/usr/bin/env python
import werkzeug
@werkzeug.Request.application
def app(request):
    f = open("audio.mp3")
    r = werkzeug.Response(f, content_type="audio/mpeg3")
    r.headers.add("Content-Disposition", "attachment; filename=mike.mp3")
    r.headers.add("Content-Length", "1000")
    return r
werkzeug.run_simple("localhost", 4000, app)

即使 Content-Type(和 Content-Length)错误,Safari 也只会下载文件。我在 Mac OS X 10.6.2 上有 Safari 版本 4.0.4 (6531.21.10)。

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2012-06-20
    • 2011-02-07
    • 2017-03-03
    相关资源
    最近更新 更多