Estoy buscando una imagen de SAP B1 Service Layer. En cartero, puedo verlo como image/png
, pero hay un problema al mostrarlo.
¿Cuál es la forma correcta de mostrarlo <img />
?
require(fetchedImage)
- no funciona
He creado una función en la nube para buscar la imagen y pasarla al cliente, pero no estoy seguro de cómo hacerlo.
Tener un objeto super raro algo como esto
data:
> '�PNGörönöu001aönöu0000öu0000öu0000örIHDRöu0000öu.........
No sé cómo pasarlo, res.send(IMAGE IN PNG)
así puedo ver una imagen en el lado del cliente.
base64
Conversión comprobada pero no estoy seguro de cómo usarlos.
Actualizar
Solicitud de cartero: (Esto funciona bien)
OBTENGA: https://su05.consensusintl.net/b1s/v1/ItemImages ('prueba') / $ valor
Encabezados : SessionId: PREGUNTE CUANDO PRUEBE
Por alguna razón, no podemos obtener la imagen directamente en Front-End y necesitamos crear un middleware, así que lo estamos haciendo en Firebase Cloud Function
Así que aquí está la función que recupera la imagen y no sabe cómo pasarla.
Aquí está la función en 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);
Y estamos obteniendo una respuesta como esta:
{estado: 200,
statusText: 'OK',
encabezados:
{ 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' ] },
config:
{ url:
datos:
' PNG \ r \ n \ u001a \ n \ u0000 \ u0000 \ u0000 \ rIHDR \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ b \ u0002 \ u0000 \ u0000 \ u0000 \ u0006 \ u001fS \ u0000 \ u0000 \ u0000 \ u0019tEXtSoftware \ u0000Adobe ImageReadyq e <\ u0000 \ u0000 \ u0003hiTXtXML: com.adobe.xmp \ u0000 \ u0000 \ u0000 \ u0000 \ u0000
ESTO ES SUPER LARGO Y VA POR 80-100 líneas más
Si quieres probar puedes usar lo siguiente:
Cartero:
POST: https://us-central1-rapid-replacement.cloudfunctions.net/getImageFromItems
cuerpo: {"productId": "prueba"}
Los ID de producto válidos son: 1. "RR000102" 2. "prueba" 3. "RR000101"
res.set({'Content-Type': 'image/png'});
const request = require('request')
request.get(url).pipe(res);
Respuestas:
Si desea usar imágenes dinámicamente, debe buscar las imágenes tan pronto como se monte el componente e insertarlo después. La imagen recuperada debe guardarse en el estado del componente e incluirse desde allí en el src attrbut de la etiqueta img. Suponiendo que ya puede obtener la imagen, el código a continuación debería funcionar.
fuente
Aquí está el más cercano a una solución de trabajo que vine. Básicamente, lo que intenté es buscar la imagen y luego convertirla en un blob en el cliente para que pueda convertirla en un
objectURL
código actualizado. Transmite la imagen como un búfer y la consume en el cliente, luego la convierte en objectURL y la asigna a la imagen. srcCódigo del servidor:
Codigo del cliente:
fuente
GET : https://su05.consensusintl.net/b1s/v1/ItemImages('test')/$value
, pero cuando paso lo mismo, no funciona. Avísame si tienes una idea mejor, disculpa si te estoy molestando.Este problema ha sido resuelto.
Entonces podemos ver la imagen en el lado del cliente usando
fuente