如何使用 html 按钮下载 dmg 文件?

How can I use a html button to download a dmg file?

所以我刚才问了这个问题,它立即被关闭了,所以我会提供更多细节,这个问题似乎是特定于 dmg 文件类型的,我到目前为止从未遇到过这个问题。

我只是希望能够单击一个按钮,然后在不使用太多 javascript 或任何东西的情况下下载 dmg。

然而,使用我的代码,dmg 文件会在浏览器中打开,因此您会得到一堆二进制乱码,如果您想了解我的意思,则文件不会下载,请前往 https://lucas-testing.000webhostapp.com/release,然后单击下载苹果系统。

dmg 的文件名发生变化,因为版本号是名称的一部分,所以我使用 php 来获取文件信息并创建一个变量来存储该网站地址,例如当前 link 生成的我的 PHP 将是:

var downloadLinkAlt = "https://lucas-testing.000webhostapp.com/release/The City Of Truro Mariners - Management Console-1.0.19.dmg"

然后我下载这个 link 的代码是:

<button onclick="location.href=downloadLinkAlt" id="DownloadByOSAlt" class="btn btn-sm btn-primary mt-3">Download for MacOS</button>

我知道上面的代码可以正常工作,因为它与完全相同的 link 但使用 exe 文件扩展名时完美地工作。

我尝试过的事情:

可以在 HTML5 中使用的下载属性来强制下载 PDF 之类的东西:

<button onclick="location.href=downloadLinkAlt" id="DownloadByOSAlt" class="btn btn-sm btn-primary mt-3" download>Loading...</button>

参考:https://www.w3schools.com/tags/att_a_download.asp

将按钮放在表单中并使用 link:

的获取请求
<form method="get" action=downloadLinkAlt>
   <button type="submit">Download!</button>
</form>

参考:

使用不可见的 iframe,其源在按下按钮时发生变化:

document.getElementById('my_iframe').src = downloadLinkAlt;

<iframe id="my_iframe" style="display:none;"></iframe>

参考:

有人对下一步尝试有什么建议吗?

这可能不是您执行下载的方法有问题,而是网络服务器没有为 dmg 文件提供正确的 mime 类型。该文件正在下载,而您得到的内容看起来像是乱码,这可能是一个迹象。浏览器不知道会发生什么。

要查看服务器发送的 MIME 类型,请在浏览器中打开开发人员工具,单击网络并在列表中查看您正在下载的文件。

谷歌搜索似乎表明 DMG 文件的正确 mime 类型是 application\octet-stream。如果您在开发人员工具中查看它时没有说这种类型,那么这可能是您的问题。如果确实如此,则可能是其他原因。这是一篇关于 mime 类型的文章:https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Configuring_server_MIME_types。向下滚动到底部,了解有关配置 mime 类型不同 Web 服务器(Apache、IIS 等)的一些说明。

同时注意到您的 URL 包含空格。这些应该是百分比编码才有效。

另一种可能更直接的下载方式是使用超链接,例如:

<a href="URL_to_your_flle.dmg">Download</a>

您可以将其样式设置为看起来像一个按钮。