Я получаю изображение из сервисного уровня SAP B1. В почтальоне я могу просмотреть это как image/png
, но есть проблема, отображающая это.
Как правильно это показать <img />
?
require(fetchedImage)
- не работает
Я создал облачную функцию для извлечения изображения и передачи его клиенту, но я не уверен, как это сделать.
Имея супер странный объект что-то вроде этого
data:
> '�PNGörönöu001aönöu0000öu0000öu0000örIHDRöu0000öu.........
Не знаю, как пройти через него, res.send(IMAGE IN PNG)
чтобы я мог получить изображение на стороне клиента.
Проверено base64
преобразование, но я не уверен, как их использовать.
Обновить
Запрос почтальона: (работает нормально)
GET: https://su05.consensusintl.net/b1s/v1/ItemImages ('test') / $ value
Заголовки : SessionId: спросите меня, когда вы пытаетесь
По какой-то причине мы не можем получить изображение непосредственно во Front-End, и нам нужно создать промежуточное ПО, поэтому мы делаем это в Firebase Cloud Function
Итак, вот функция, которая выбирает изображение и не знает, как его передать.
Вот функция в Firebase Cloud Function:
if (!req.body.productId) {
res.status(400).send({ error: "productId is required" });
return;
}
console.log("Starting the process");
const productId = req.body.productId;
const login = await Auth.login();
const fetchedImg = await ItemMaster.getImage(login["SessionId"], productId);
//Here in the fetchedImg, we're getting some data like
res
.status(200)
.set("Content-Type", "image/png")
.send(fetchedImg);
И мы получаем ответ вроде этого:
{статус: 200,
statusText: «ОК»,
заголовки:
{ server: 'nginx', date: 'Wed, 22 Jan 2020 03:52:22 GMT', 'content-type': 'image/png', 'transfer-encoding': 'chunked', connection: 'close', dataserviceversion: '3.0', 'content-disposition': 'inline; filename="rr-96600.png"', vary: 'Accept-Encoding', 'set-cookie': [ 'ROUTEID=.node2; path=/b1s' ] },
конфигурации:
{ url:
данные:
«PNG \ г \ п \ u001a \ п \ u0000 \ u0000 \ u0000 \ rIHDR \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ Ъ \ u0002 \ u0000 \ u0000 \ u0000 \ u0006 \ u001fS \ u0000 <u0000 \ u0019tEXtSoftware \ u0000Adobe ImageReadyq e <\ u0000 \ u0000hiTXtXML: com.adobe.xmp \ u0000 \ u0000 \ u0000 \ u0000 \ u0000
Это супер долго и идет еще на 80-100 строк
Если вы хотите проверить, вы можете использовать следующее:
Почтальон:
ПОСТ: https://us-central1-rapid-replacement.cloudfunctions.net/getImageFromItems
body: {"productId": "test"}
Допустимый идентификатор продукта: 1. «RR000102» 2. «тест» 3. «RR000101»
res.set({'Content-Type': 'image/png'});
const request = require('request')
и в маршрутеrequest.get(url).pipe(res);
Ответы:
Если вы хотите использовать изображения динамически, вы должны получить изображения, как только компонент смонтирован, и вставить его после. Затем извлеченное изображение должно быть сохранено в состоянии компонента и оттуда включено в атрибут src тега img. Предполагая, что вы уже можете получить изображение, приведенный ниже код должен работать.
источник
Вот самое близкое к рабочему решению, которое мне пришло. По сути, я попытался получить изображение, а затем превратить его в большой двоичный объект на клиенте, чтобы вы могли превратить его в.
objectURL
Обновленный код, который передает изображение в виде буфера и использует его на клиенте, а затем превращает его в objectURL и назначает для изображения ЦСИКод сервера:
Код клиента:
источник
GET : https://su05.consensusintl.net/b1s/v1/ItemImages('test')/$value
, но когда я передаю то же самое, это не работает. Дайте мне знать, если у вас есть идея получше, извините, если я вас беспокою.Проблема была решена.
Таким образом, мы можем увидеть изображение на стороне клиента, используя
источник