【问题标题】:Force download not responding强制下载无响应
【发布时间】:2012-11-20 16:32:59
【问题描述】:

我正在使用 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();

}

这应该可以工作。有什么问题吗?

【问题讨论】:

  • 'images/products/' . $fileName; 不是网址所以应该没问题。
  • 好的,谢谢您的信息。 :)
  • 您是否尝试通过 ajax 响应返回来下载此文件? ajax 不适用于文件下载...
  • 是的,这就是我目前正在尝试做的事情。
  • 代码在我通过 ajax 请求调用的 php 文件中。

标签: php header content-type


【解决方案1】:

正如 Marc B 在 cmets 中所述,您不能通过 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 的解决方案,用于返回从 php 的 readfile 文档中获取的图像:

<?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 是查询字符串参数的名称。

【讨论】:

  • 如何在不使用 AJAX 处理我的 php 文件的情况下传递我的 $_POST 密钥?
  • 您可以将其设为 $_GET。 dynamic-image-url.php?id=image-id 或者你可以只是一个表格。有关详细信息,请参阅编辑。
  • 哈!在去这篇文章之前,我做了一个非常相似的事情。很高兴,你有同样的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多