html直接链接下载不使用不同的文件编码

时间:2013-07-19 12:00:43

标签: html5 download hyperlink href

我正在编辑由其他开发者创建的网站。 尝试不同的方式下载一些文件,我注意到了这一点:

我拿了一个随机文件并将该文件放在网站的根文件夹中

1)重命名文件“a.exe”,    如果我浏览到“www.mysite.com/a.exe”,则启动文件下载。

2)重命名文件“a.pdf”,    如果我浏览“www.mysite.com/a.pdf”,浏览器会尝试打开pdf。

3)重命名文件“a.txt”,    如果我浏览“www.mysite.com/a.txt”,则启动文件下载。

4)重命名文件“a.jpg”,    如果我浏览“www.mysite.com/a.jpg”,浏览器会尝试显示图像。

5)重命名文件“a.apk”,    如果我浏览到“www.mysite.com/a.apk”服务器响应“404 - 文件或目录未找到。”。

但....为什么?文件是一样的,并且总是在同一个文件夹中,为什么突然似乎“消失”?

以前的开发人员设计了一个服务器端解决方法,可以下载apk文件。

但我无法相信下载文件我不能简单地写

<a href="www.mysite.com/a.apk"> DOWNLOAD </ a>

因为它适用于除apk文件以外的所有文件类型...

3 个答案:

答案 0 :(得分:5)

找到解决方案!如果我们要下载apk文件,我们必须告诉网站它应该如何表现。 要做到这一点,请添加到web.config:

<system.webServer>

    <staticContent>

        <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" />

    </staticContent>

</system.webServer>

稍后只需以这种方式构建链接:

<a href="myappPath.apk">DOWNLOAD</a>

就是这样!

答案 1 :(得分:2)

托管网站的服务器可能不知道此文件类型扩展(MIME类型)。每个扩展都在服务器中声明。通过这些声明,您可以允许和拒绝通过Internet访问文件类型。 您可能必须将文件扩展名添加到服务器。

APK的MIME声明是 application / vnd.android.package-archive

答案 2 :(得分:0)

Web服务器,客户端操作系统和用户代理在确定下载资源的内容类型时进行交互。 Web服务器发送http标头告诉客户端发送的内容代表什么,并且可以添加标头,通过该标头指定是否将内容保存为文件并可以建议文件名。但是,浏览器中的用户设置可能会覆盖此设置。浏览器和os范围内的文件扩展名与内容类型和/或操作的关联也可能会产生干扰。文件扩展名将是url路径部分的末尾(即使对于动态创建的资源也是如此)。

如果您不需要浏览器集成,请查看命令行工具curlwget,您可以明确指定将下载的数据保存在给定的文件名下。

例如。 (linux; for windows用双引号替换所有单引号;显然,不需要用于未受保护资源的用户/密码):

wget --no-cache --no-check-certificate --no-proxy 
     --output-document='<target_file_name>'
     --auth-no-challenge --http-user='<user>' --http-password='<pw>' '<url>'