0

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

}

这应该有效。任何问题?

4

1 回答 1

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

于 2012-11-20T16:51:35.707 回答