如何强制下载图像?

时间:2012-08-21 02:57:20

标签: php javascript jquery base64

我在我的页面上有一个动态生成的图像,如下所示:

<img id="my_image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" />

而不是告诉我的用户右键单击图像并点击保存我想要公开下载链接,点击该链接时会提示下载图像。怎么做到这一点?

最初我在js中的尝试:

var path = $('#my_image').attr('src');
window.open('./download.php?file=' + path);

并在download.php中:

<?php
    header('Content-Description: File Transfer');
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename= " . $_GET['file'] . "");
?>

<img src="<?= $_GET['file'] ?>" />

但问题是,Base64 url​​ stirngs太大,超出了GET请求字节限制。

我对JavaScript或PHP的解决方案持开放态度。

2 个答案:

答案 0 :(得分:7)

在download.php中试试这个:

<?php
    header('Content-Description: File Transfer');
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename= Image.jpg");
    exit(base64_decode($_POST['data'])); //url length is limited, use post instead
?>

并将其用于表格:

<form method="post" action="./download.php">
  <input type="hidden" name="data" value="/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" />
  <a href="#" onclick="this.parentNode.submit();return false;">Download</a>
</form>
像Dagon这样说这不是最好的方法,因为提交表单就像上传整个图像一样。

答案 1 :(得分:2)

原来其他一个问题确实得到了答案:

Browser/HTML Force download of image from src="data:image/jpeg;base64..."

我严格按照客户端sde这样做:

$('a#download_image').on('click', function() {
    var url = $('#my_image').attr('src').replace(/^data:image\/[^;]/, 'data:application/octet-stream');
    location.href = url;
});