如何使用 php 和 ajax 强制下载图像而不显示它
How to force downloading image using php and ajax without displaying it
这是生成图片的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();
})
此脚本在浏览器中显示图像,但如何告诉浏览器下载它。
phpheader中的内容配置我已经用过了。但是还是不行
图像未保存到磁盘,因为您将其显示为图像元素的 src
。
如果您希望浏览器将 Content-Disposition 视为浏览器将其保存在某个地方而不是显示它的指令,那么您需要将浏览器发送到那个 URL。
要实现这一目标,您可以进行的最小更改是设置 location
success: function (data, textStatus, jqXHR) {
location = 'gen_barcode.php?code=1234567');
},
但将所有 JavaScript 替换为简单的 link 会更简单。
<a href="gen_barcode.php?code=1234567">Save image</a>
这是生成图片的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();
})
此脚本在浏览器中显示图像,但如何告诉浏览器下载它。 phpheader中的内容配置我已经用过了。但是还是不行
图像未保存到磁盘,因为您将其显示为图像元素的 src
。
如果您希望浏览器将 Content-Disposition 视为浏览器将其保存在某个地方而不是显示它的指令,那么您需要将浏览器发送到那个 URL。
要实现这一目标,您可以进行的最小更改是设置 location
success: function (data, textStatus, jqXHR) {
location = 'gen_barcode.php?code=1234567');
},
但将所有 JavaScript 替换为简单的 link 会更简单。
<a href="gen_barcode.php?code=1234567">Save image</a>