3

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

<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​​ 搅拌量太大,超过了 GET 请求字节限制。

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

4

2 回答 2

8

在 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 说的那样,这不是最好的方法,因为提交表单就像上传整个图像一样。

于 2012-08-21T03:14:17.253 回答
2

事实证明,其他问题之一确实有答案:

浏览器/HTML 强制从 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;
});
于 2012-08-22T01:46:02.397 回答