我必须为学校创建一个在线时间表。目前困扰我的部分是无法通过单击文件名下载文件。
我尝试通过单击带有html/php的按钮或链接来下载文件,但对于javascript,我应该以某种方式将php和javascript结合起来,因为javascript没有readfile函数。
我的一些尝试:
<a href="dateiupload/testmove.txt">Download</a>
这仅在Web浏览器中显示文件的内容,但我无法下载它。我的testmove.txt
内容是testmove123
,所以我只在浏览器中看到testmove123
的文本。
再比如:Javascript:
function download(file)
{
window.location=file;
}
+html:
<input type="button" value="Download" onClick="download('dateiupload/testmove.txt')" >
做一样。
再比如:Javascript:
function download(path)
{
var ifrm = document.getElementById("frame");
ifrm.src = path;
}
+html:
<iframe id="frame" style="display:none"></iframe>
<a href="javascript:download('/dateiupload/testmove.txt')">download</a>
通过单击"下载",javascript功能启动,但没有其他发生,我看到了相同的站点。
另一个例子(用 php):Javascript:
function download(path)
{
var ifrm = document.getElementById(frame);
ifrm.src = "download.php?path="+path;
}
+html (同上):
<iframe id="frame" style="display:none"></iframe>
<a href="javascript:download('/dateiupload/testmove.txt')">download</a>
+php(我或多或少工作的原因):
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$_GET['path']);
readfile($_GET['path']);
此解决方案不会等待我的点击,而是通过启动站点开始下载。
我想到的一个可行的解决方案是链接到另一个自动开始下载的站点,但绝对不是必须的。我在网站上使用了$_POST
变量,当我离开网站时我丢失了它们,下载后我无法回来。它必须通过单击文件名开始下载。
您可以使用"下载"属性直接从锚标记下载。<a href="dateiupload/testmove.txt" download>Download</a>
默认情况下,将testmove.txt
下载文件的文件名。
您可以像这样更改文件名。<a href="dateiupload/testmove.txt" download="ExampleFileName">Download</a>
更多详情请访问 w3Schools
您使用这些标头是正确的 - 如您所见,正在下载该文件。现在唯一的问题是在需要时下载它。
对于一个非常简单的解决方案,我建议设置一个download.php
文件,该文件将成为您从中下载所有文件的页面。您将为此文件设置一个 GET
参数,URL 将如下所示:
http://your-cool-site.com/download.php?filename=textmove.txt
现在在 download.php
中,您将读取该GET
参数,该参数将是一个文件名,然后最终将其传递给 readfile
函数。这是您应该考虑实施某种级别的安全性的阶段,因为将路径直接传递给函数可能会让人们访问他们不应该查看的文件!考虑将实际的可下载文件限制为有限的文件选择或路径,您知道这些文件或路径对人们来说是"安全"的。
您还需要在标头中使用文件名(甚至可能使用文件大小以支持显示下载进度)。
准备好此download.php
文件后,您可以按照与现在非常相似的方式放置从其他页面指向它的链接:
<a href="download.php?filename=testmove.txt">Download File</a>
单击此链接将发出download.php
请求,当它获得适当的标头时,下载将开始。