Pobieram obraz z warstwy serwisowej SAP B1. W listonoszu mogę go zobaczyć jakoimage/png
, ale jest problem z wyświetlaniem go.
Jaki jest właściwy sposób, aby to pokazać <img />
?
require(fetchedImage)
- nie działa
Utworzyłem funkcję chmury, aby pobrać obraz i przekazać go klientowi, ale nie jestem pewien, jak to zrobić.
Posiadanie super dziwnego obiektu coś takiego
data:
> '�PNGörönöu001aönöu0000öu0000öu0000örIHDRöu0000öu.........
Nie wiem, jak to przekazać res.send(IMAGE IN PNG)
aby zobaczyć obraz po stronie klienta.
Sprawdzono base64
konwersję, ale nie jestem pewien, jak ich użyć.
Aktualizacja
Żądanie listonosza: (działa dobrze)
GET: https://su05.consensusintl.net/b1s/v1/ItemImages („test”) / $ wartość
Nagłówki : SessionId: ZAPYTAJ MNIE, GDY SPRÓBUJESZ
Z jakiegoś powodu nie możemy pobrać obrazu bezpośrednio z interfejsu użytkownika i musimy utworzyć oprogramowanie pośrednie, więc robimy to Firebase Cloud Function
Oto funkcja, która pobiera obraz i nie wie, jak go przekazać.
Oto funkcja 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);
I otrzymujemy taką odpowiedź:
{status: 200,
statusText: „OK”,
nagłówki:
{ 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:
dane:
' 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
TO JEST SUPER DŁUGIE I PRZEKRACZA O 80-100 linii więcej
Jeśli chcesz przetestować, możesz użyć:
Listonosz:
POST: https://us-central1-rapid-replacement.cloudfunctions.net/getImageFromItems
body: {„productId”: „test”}
Prawidłowy produkt to: 1. „RR000102” 2. „test” 3. „RR000101”
res.set({'Content-Type': 'image/png'});
const request = require('request')
i na trasierequest.get(url).pipe(res);
Odpowiedzi:
Jeśli chcesz używać obrazów dynamicznie, musisz pobrać obrazy zaraz po zamontowaniu komponentu i wstawić go później. Pobrane zdjęcie powinno być następnie zapisane w stanie komponentu i włączone stamtąd do atrybutu src tagu img. Zakładając, że możesz już pobrać zdjęcie, poniższy kod powinien działać.
źródło
Oto najbliższe działające rozwiązanie, które przyszedłem. Zasadniczo próbowałem pobrać obraz, a następnie przekształcić go w obiekt blob na kliencie, aby można go przekształcić w
objectURL
.Zaktualizowany kod przesyła obraz jako bufor i zużywa go na kliencie, a następnie zamienia go w objectURL i przypisuje do obrazu srcKod serwera:
Kod klienta:
źródło
GET : https://su05.consensusintl.net/b1s/v1/ItemImages('test')/$value
, ale kiedy zdaję to samo, to nie działa. Daj mi znać, jeśli masz lepszy pomysł, przepraszam, że przeszkadzam.Ten problem został rozwiązany.
Dzięki temu możemy zobaczyć obraz po stronie klienta
źródło