javascript - 如何使用php和ajax强制下载图像而不显示它

标签 javascript php jquery ajax dynamic-image-generation

这是生成图片的php代码

<?php    

require('class/BCGColor.php');
require('class/BCGDrawing.php');   
require('class/BCGean8.barcode.php');

$font = new BCGFontFile('font/Arial.ttf', 18);
$color_black = new BCGColor(0, 0, 0);
$color_white = new BCGColor(255, 255, 255);

// Barcode Part
$code = new BCGean8();
$code->setScale(2);
$code->setThickness(30);
$code->setForegroundColor($color_black);
$code->setBackgroundColor($color_white);
$code->setFont($font);
$code->parse($_GET['code']);

// Drawing Part
$drawing = new BCGDrawing( '' , $color_white);
$drawing->setBarcode($code);
$drawing->draw();

header('Content-Type: image/png');

$drawing->finish(BCGDrawing::IMG_FORMAT_PNG);

header('Content-Disposition: attachment; filename=file.png');    

?>

这是 HTML

<a href="#" >Click</a> <!-- I want to click here to download -->

和Js

$.ajax({
                url: "gen_barcode.php",
                type: 'GET',
                data: {code: '1234567'},
                success: function (data, textStatus, jqXHR) {
                    console.log(data)
                        $('#my_image').attr('src', 'gen_barcode.php?code=1234567');

                },
                error: function (jqXHR, textStatus, errorThrown) {
                    console.log(data)
                },

            })

            e.preventDefault();
        })

此脚本在浏览器中显示图像,但如何告诉浏览器下载它。 我已经在 php header 中使用了内容配置。但是还是不行

最佳答案

图像未保存到磁盘,因为您将其显示为图像元素的 src

如果您希望浏览器将 Content-Disposition 视为浏览器将其保存在某个地方而不是显示它的指令,那么您需要将浏览器发送到该 URL。

要实现这一目标,您可以进行的最小更改是设置 location

success: function (data, textStatus, jqXHR) {
    location = 'gen_barcode.php?code=1234567');    
},

但是用一个简单的链接替换所有 JavaScript 会更简单。

<a href="gen_barcode.php?code=1234567">Save image</a>

关于javascript - 如何使用php和ajax强制下载图像而不显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943634/

相关文章:

javascript - jQuery 错误 TypeError : $. event.handle is undefined

php - vTiger网络服务 "ACCESS_DENIED : Permission to perform the operation is denied for id"

php(比较查询中的两个日期时间)

javascript - 使用 HTML 进行 Visual Basic UI 设计

javascript - 如何告诉网络浏览器用户已经修改了页面?

javascript - 无法删除并显示确认框

javascript - 如何让用户在屏幕上输入以反射(reflect)点击事件(js,html)

javascript - 如何使用 JavaScript 在 SharePoint 列表中批量创建项目?

php - IPN 验证 ipnSimulator 无效

javascript - 如何集中各种 z-index div 类?