我正在使用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();
}
这应该有效。有什么问题吗?
答案 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是查询字符串参数的名称。