强制下载无响应

时间:2012-11-20 16:33:00

标签: php header content-type

我正在使用ajax调用来传递值。我已经这样做了,我希望获取该值,并在我的表格上查找特定图像。

当我到图像下载时,它对我不起作用。我查看了我的php.ini文件,我的allow_furl_open已关闭。我认为这可能是罪魁祸首。请忽略mysql位,因为我知道它应该更新,这不是我的代码所以将被更改。

这是代码。

if (isset($_POST['download'])) {
$sql = "SELECT `imageURL` FROM `digital_materials` WHERE `digital_materials`.`id` = '$id'";
$record = mysql_query($sql);
$row = mysql_fetch_assoc($record);

$fileName = $row['imageURL'];
$fileURL = 'images/products/' . $fileName;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header('Content-Disposition: attachment; filename=' . $row['imageURL']);
readfile($fileURL);
exit();

}

这应该有效。有什么问题吗?

1 个答案:

答案 0 :(得分:1)

如Marc B的评论中所述,您无法通过ajax下载文件。 Ajax只会将网络请求返回给发送者(即jQuery ajax有一个包含请求结果的成功处理函数:http://api.jquery.com/jQuery.ajax/)。一种可能的解决方案是使用php url打开一个新窗口,它将触发下载请求。一个JavaScript解决方案是:

window.open('dynamic-image-url.php');

另一种解决方案是使用具有target =“_ blank”属性的锚标记。

<a href="dynamic-image-url.php" target="_blank">Download Image</a>

以下是用于返回从php的readfile文档中获取的图像的php解决方案:

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

编辑 * *添加了将发布变量的表单示例

<form action="dynamic-image.php" method="post" target="_blank">
   <input type="hidden" name="id" value="<?php echo $value; ?>" />
   <input type="submit" value="Download Image" />
</form>

然后您将该变量引用为$ _POST ['id'],因为这是表单中name属性的值。

使用$ _GET参数,您可以按以下方式执行:

<a href="dynamic-image-url.php?id=<?php echo $id; ?>" target="_blank">Download Image</a>

使用$ _GET ['id']引用PHP中的值,因为id是查询字符串参数的名称。