强制下载隐藏的表单不起作用

时间:2012-12-08 23:19:03

标签: php javascript download hidden-field

我正在尝试使用名为“Proof”的javascript字符串强制下载文件。我创建了一个隐藏的表单,从php脚本触发一个动作。我没有使用window.location.href的原因是因为变量Proof很长并且get方法无法处理它。

//点击按钮保存

$("#save").click(function () {
    var Proof = $("#main").html();
    var url = '/download-to-file.php';
    //send request
    jQuery('<form action="'+ url +'" method="post">'+
    '<input type="hidden" name="Proof" value="'+ Proof +'" />'+
    '</form>').appendTo('body').submit().remove();

 });

php代码:

<?php
$Proof = $_POST["Proof"];
$proof = stripslashes($Proof);

$file = 'savedproof.txt';


file_put_contents($file, $proof);
header('Content-disposition: attachment; filename="'.$file.'"');
header("Content-Type: text/txt");
header("Content-Transfer-Encoding: binary");
header('Content-length: '.filesize($file));  
header('Accept-Ranges: bytes');
header('Content-Description: File Transfer');

readfile($file);
?>

我收到了下载对话框,但该文件为空。我甚至尝试使用像'test'这样的较小字符串,但仍然是空的,所以我猜测隐藏表单的值不起作用。

由于

1 个答案:

答案 0 :(得分:3)

我想知道file_put_contents是否失败但技术上没有必要将数据写入文件,因为它已经在$ _POST中。

尝试将代码更改为此代码并查看其是否有效:

<?php
$Proof = stripslashes($_POST["Proof"])

header('Content-disposition: attachment; filename="savedproof.txt"');
header("Content-Type: text/html; charset=utf-8");
header('Content-length: '.strlen($Proof));  
header('Accept-Ranges: bytes');
header('Content-Description: File Transfer');

echo $Proof;