javascript — как заставить загрузку изображения используя php и ajax без его отображения

Вот код 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. Но это все еще не работает

1

Решение

Изображение не сохраняется на диск, потому что вы отображаете его как 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>
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]