0

我有一个 PHP 脚本,它推送标题以允许下载文件。此脚本在通过超链接或通过使用链接的浏览器调用时可以正常工作。这是它的样子:

<a href="download.php?file=test.mp3&properFilename=Testing File">Download</a>

我希望这是一个按钮(sbumit),所以我这样做了:

<form action="download.php?file=test.mp3&properFilename=Testing File" method="get">
<input type="submit" value="Download Audio" name="download"/>
</form>

但是,这不起作用。当我点击它时。它会启动下载对话框,但文件名是空的。它将文件名显示为“.mp3”(不带引号)!通过超链接的相同链接显示了确切的文件名“测试文件”。为什么是这样??以下是相关的 PHP 代码段:

$filename = '../'.$_GET['file'];
$properFilename = $_GET['properFilename'].'.mp3';

header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();   

谢谢你的帮助。这让我一整天都在发疯!!!

4

2 回答 2

5

我认为它已被 urlencoded 的操作 url,并且未发送硬编码的 GET 参数。

您可以尝试将操作 url 简单地设置为 download.php 并有两个包含“file”和“properFilename”参数的隐藏字段,如下所示:

<form action="download.php" method="GET">
  <input type="submit" value="Download Audio" name="download"/>
  <input type="hidden" name="file" value="test.mp3" />
  <input type="hidden" name="properFilename" value="Testing File" />
</form>

或者您可以使用输入类型 =“按钮”,即使没有表单:

<input type="button" 
      onclick="location.href='download.php?file=test.mp3&properFilename=Testing File';" 
      value="Download"/>

或图像按钮:

<a href="download.php?file=test.mp3&properFilename=Testing File">
   <img src="IMAGE_BUTTON_HERE" />
</a>
于 2009-01-10T05:24:31.883 回答
0

除了像CMS建议的那样使用 <input type='button'> 之外,您还可以使用 button 元素(这实际上是语义正确的元素,因为您不在表单中)

<button onclick="document.location = 'bla.php?f=vars'">Download</button>

更好的做法当然是将 onclick 事件从按钮中移出到单独的 javascript 文件中。

于 2009-01-10T13:30:14.617 回答