cancel
Showing results for 
Search instead for 
Did you mean: 
SOLVED

How can I display the app icon received via ctrlX REST API in an HTML page?

How can I display the app icon received via ctrlX REST API in an HTML page?

HmiGuide
Community Moderator
Community Moderator

I can retrieve the icon of a package e.g. via the ctrlX REST API call. But it's not a link to a file, it seems to be the content of the image file.
The question is: What do I have to do, that I can display this image in an HTML <img src=""> tag?

https://127.0.0.1:8443/package-manager/api/v1/packages/snap_rexroth-ide/icon

 

5 REPLIES 5

CodeShepherd
Community Moderator
Community Moderator

I did some tests and the data is sent back as a data stream and content type png. Normally the browser stores this in its internal cache and presents it on the screen. So In my opinion this is a functionality of the receiving client.

ctrlX CORE access app icon with browserctrlX CORE access app icon with browser

ctrlX CORE access app icon with REST clientctrlX CORE access app icon with REST client

webiq-sk
Frequent Contributor

This explains how you can display binary image data in an HTML image tag - there is lots more information online on this:
https://siddharthboraniait.wordpress.com/2011/08/16/display-imagein-html-as-binary-data-with-base64-...

 

HmiGuide
Community Moderator
Community Moderator

@webiq-sk thanks for the link, especially because it is a common thing, which has nothing to do with WebIQ.

I found the information you linked to, in my researches in the internet. I understand that I have to convert the image to base64, but the JS code, which fullfills this task I'm still looking for.

webiq-sk
Frequent Contributor

HmiGuide
Community Moderator
Community Moderator

I got a solution:

  • tell axios to return a blob instead of a json
  • use FileReader object to convert blob to DataURL
jConfig = {
      headers: { authorization: 'Bearer ' + _sIdmToken },
      responseType: 'blob',
    }
jResp = await axios.get(`${sMgr}/packages/${AppsID}/icon`, jConfig)
blob2DataURL(jResp.data, setImg, img)
 
function blob2DataURL(blob, callback, img) {
  let fr = new FileReader()
  fr.onload = function (e) {
    callback(e.target.result, img)
  }
  fr.readAsDataURL(blob)
}

function setImg(dataURL, img) {
  img.src=dataURL
}

 

Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist