Pergunta

Eu tenho um script PHP que empurra os cabeçalhos para permitir que um arquivo para download. Este script funciona bem quando chamado através de uma hiperligação ou através do navegador usando link. Esta é a forma como ele se parece com:

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

Eu quero que este seja um botão (sbumit) em vez, então eu fiz o seguinte:

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

No entanto, isso não funciona. Quando eu clicar sobre ele. Ele inicia a caixa de diálogo de download, mas o nome do arquivo está vazio. Ele mostra nome do arquivo como" .mp3" (sem aspas)! Nesse mesmo link via os shows de hiperlink o nome exato do arquivo "Arquivo Testing". Por que é isso?? Aqui está o PHP Trecho de causa:

$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();   

Obrigado por qualquer ajuda . Este foi me deixando louco todo o dia e noite !!!

Foi útil?

Solução

Eu acho que a ação url tem sido urlencoded, e os parâmetros GET codificados não são enviados.

Você pode tentar definir a url ação simplesmente para download.php e têm dois campos ocultos que contêm o "file" e os parâmetros "properFilename", como este:

<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>

Ou você pode usar um input type = "button", mesmo sem a forma:

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

Ou um botão de imagem:

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

Outras dicas

Em vez de usar como CMS sugere, você também pode usar o elemento botão (que é realmente a correta semântica aqui desde o seu não em um formulário)

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

Ainda melhor seria fora do curso ser para mover o evento onclick para fora do botão em um arquivo JavaScript separado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top