Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何强制下载图像?_Php_Javascript_Jquery_Base64 - Fatal编程技术网

Php 如何强制下载图像?

Php 如何强制下载图像?,php,javascript,jquery,base64,Php,Javascript,Jquery,Base64,我的页面上有一个动态生成的图像,如下所示: <img id="my_image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" /> $('a#download_image').on('click', function() { var url = $('#my_image').attr('src').replace(/^data:image\/[^;]/, 'data:app

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

<img id="my_image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" />
$('a#download_image').on('click', function() {
    var url = $('#my_image').attr('src').replace(/^data:image\/[^;]/, 'data:application/octet-stream');
    location.href = url;
});
在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'] ?>" />
<?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
?>

" />
但问题是,Base64 url字符串太大,超出了GET请求字节限制


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

在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'] ?>" />
<?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所说,这不是最好的方式,因为提交表单就像上传整个图像一样。

其他问题中的一个确实有答案:

我严格按照客户sde进行操作,如下所示:

<img id="my_image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" />
$('a#download_image').on('click', function() {
    var url = $('#my_image').attr('src').replace(/^data:image\/[^;]/, 'data:application/octet-stream');
    location.href = url;
});

即使Base64字符串确实适合查询字符串,该PHP代码也不会执行您希望它执行的操作。使src指向带有标题等的PHP脚本以供下载。包括图像或使用文件\u get\u contents()获取图像。希望的可能副本也有帮助bruv
:)
您首先是如何生成内联图像的?@Jack HTML5 FileReader用于将图像抓取到用户的浏览器中,他/她所做的编辑是通过画布JavaScript完成的。JS插件是生成Base64图像代码的从服务器到客户端再到服务器再到客户端似乎有点像魔法师pointless@UnLoCo因此,这确实会提示图像下载。但当下载的图像被打开时,它是空的(长度为0字节)。关于性能问题:该图像从未出现在服务器上。我使用HTML5 FileReader API将图像加载到客户端浏览器上,并使用画布JavaScript对其进行编辑。JavaScript生成Base64图像。因此,除了发布长字符串之外,可能没有任何性能问题。下载仍应从客户端提供的浏览器(正确吗?)它对我有效,我下载了一个可查看的图像。在用户单击链接并提交表单之前,请确保您正在填充数据字段!