我正在编辑由其他开发者创建的网站。 尝试不同的方式下载一些文件,我注意到了这一点:
我拿了一个随机文件并将该文件放在网站的根文件夹中
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文件以外的所有文件类型...
答案 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路径部分的末尾(即使对于动态创建的资源也是如此)。
如果您不需要浏览器集成,请查看命令行工具curl
或wget
,您可以明确指定将下载的数据保存在给定的文件名下。
例如。 (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>'