在HTML链接中添加MIME类型

38

我知道如何在 Web 服务器中更改 MIME 类型。我用它来确保浏览器下载我的 .scrpt 文件而不是打开纯文本版本。到目前为止一切都很好,但是是否可以对链接执行相同的操作?我想链接到 GitHub 上的一个文件,但这将会作为纯文本文件打开。我能否向链接添加 "MIME 类型属性",以告诉浏览器下载该文件?

以下是我想要看到的:

<a mimetype="application/octet-stream" href="http://gist.github.com/raw/279094/39d5a2c1037288d5ee0ba1a17dca9edb368bbe42/RepairiPhotoDates.scpt">download</a>

2
MIME类型不能决定文件是查看还是下载。这取决于浏览器,基于MIME类型和Content-Disposition头来决定。 - Thomas
我有同样的问题:我想要提供的文件的MIME类型没有被我的托管公司设置,也没有办法更改。难道真的没有办法告诉浏览器在<a...>链接中它将要下载什么吗? - James
4个回答

48

该回答是时候到了。这是一个非常古老的问题,可能在那个时候是不可能的,但自那以后发生了很多变化。HTML5规范增加了download属性:

<a href="hugepdf.pdf" download>Download file</a>

这正好满足我的需求,告诉浏览器下载文件而不是打开它。感谢Jonathan Svärdén解决我多年的问题!


1
@Cimm,你能告诉我如何在Web服务器中更改MIME类型吗? - Muthu
1
@muthu 这取决于Web服务器。我建议你谷歌“<Web服务器名称> MIME类型”,如果这不能解决你的问题,可以在SO上提出另一个问题。这不是问这个问题的合适场所。 - Cimm
1
注意:由于对下载属性的支持,此解决方案并不适用于所有人。您可以在此处检查http://caniuse.com/#search=download。 - pcatre
1
在Edge(因此可能也适用于Chrome)中,您可以将预期下载的文件名(包括或不包括扩展名)提供给下载属性,如<a href="hugepdf.pdf" download="huge-pdf-by-cimm">Download file</a>。这将以该名称下载文件。 - Adrian Föder

16
你可以指定type attribute,但服务器发送的内容类型是权威的。

此属性提供了一个建议性提示,指向链接目标地址上可用内容的内容类型。它允许用户代理选择使用后备机制,而不是获取他们不支持的内容类型的内容。

除此之外,没有其他选项。

1
我尝试了这个,但它不起作用。就像你所解释的那样... 感谢清晰的解释。 - Cimm

1

你能否设置一个中间人脚本,将所需文件下载到服务器,然后以不同的MIME类型将其上传给用户?


0

HTML并不关心HTTP响应头。这绝对是一个服务器端的问题,在HTTP响应体/内容发送之前必须在HTTP响应头中解决。如果没有像Ruby或PHP这样的脚本语言,你将无能为力。


这不是服务器端的问题,一些服务器(rest API)可以从一个端点提供多种mime类型。因此,您需要在前端解决这个问题。 - Wilt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接