如何让用户下载保存在服务器上的图片?目标是让用户单击链接并指定图像以开始下载。
Facebook示例:
答案 0 :(得分:3)
建立到另一个.php页面的链接,而不是图像。然后在该页面上使用content-disposition标头,如下所示:
<?php
// Define the name of image after downloaded
header('Content-Disposition: attachment; filename="file.jpg"');
// Read the original image file
readfile('file.jpg');
?>
从那里,你可以在像
这样的get命令中添加图像的文件名`download.php?filename=file`
然后在文件中引用:
readfile($_GET['filename'].'.jpg')
答案 1 :(得分:2)
您需要在传递图像的响应上设置特定标头,以强制下载。
Content-Disposition: attachment; filename=myawesomefilename.png
否则它只会在浏览器中加载。
因此,发送该标头,然后只链接到使用该标头传递该图像的路径。
答案 2 :(得分:1)
发送标题告诉浏览器下载如下:
header("Content-type: application/force-download")
然后向他们发送文件本身的数据,不带任何HTML或任何内容。
此示例是从PHP docs
剪切的<?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;
}
?>
答案 3 :(得分:1)
如果通过“下载保存在服务器上的图片”,您的意思是“尝试让浏览器提供'另存为'对话框而不是仅显示图片”,那么您可能需要考虑使用Content-Disposition: attachment提供图像的响应中的标题:
Content-Disposition: attachment; filename="thefilename.jpg"
您可以使用header function在PHP中设置标题。