Поскольку вы создаете кодированное изображение base64
на внешнем интерфейсе, серверная часть должна возвращать кодированное изображение base64
.
Вы возвращаете изображение в формате utf8
, что, конечно, не сработает. utf8
- кодировка по умолчанию при использовании пакета request
.
Для этого вы можете использовать encoding
свойство пакета request
. Или передайте encoding: null
и преобразуйте body
в строку base64
, используя .toString('base64')
request({ url, encoding: 'base64' }, function (error, response, body) {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
console.log(response.headers['content-type']);
console.log(body);
return res.json({ imageData: body});
});
Теперь response.imageData
- это кодированная строка base64
, которую можно использовать с: data:image/png;base64,
Имейте в виду, что вы пишете png
на передней панели. Если вы собираетесь работать с различными расширениями, вы можете отправить полный src
с сервера:
// 'content-type' must not be image/png or image/jpeg, improve the logic
// I'll leave that to you.
const src = `data:${response.headers['content-type']};base64,${body}`;
return res.json({ src });
Другой вариант - удалить ajax и отправить изображение напрямую, без base64
.
передний
$("#resultImage").attr("src", "/test");
назад
app.get('/test', (req, res) => {
let url = 'https://ion.gemma.feri.um.si/ion/services/geoserver/demo1/wms?service=WMS&version=1.1.0&request=GetMap&layers=demo1%3Amaribor-dof25&bbox=546631.6237364038%2C156484.86830455417%2C550631.7865026393%2C160485.0310707898&width=767&height=768&srs=EPSG%3A3794&format=image%2Fjpeg';
request(url).pipe(res);
});