Scenario: I’ve got a schema with an asset field. Assets are stored on Azure Blob Storage. I’ve configured a webhook that executes when a content item based on that schema is updated.
The webhook only contains the asset id:
"asset": {
"iv": [
"5c9e422d-10ab-4cb7-b3dc-5c28b729252d"
]
},
But I need the name of the Blob in Azure Blob Storage, as I need to update metadata there.
I’ve seen this topic, explaining I can use GraphQL. But I don’t think I can use GraphQL directly on assets? I can’t query on my content, as I need to cater for the scenario that the asset field is changed.
The “dataOld” contains the old asset id, so I need to query directly on asset id, I can’t query on my content type.
When I call the API at /api/apps/{app_name}/assets/{id}
it returns a bunch of metadata, but not the sourceUrl.
The graphql endpoint should provide a sourceUrl
field for each asset. You can resolve assets in graphql as well.
But if you have the id you can also determinate the blob source url. I am not sure how the asset blob storage urls are formatted, but the id is just the path to the asset.
Thanks @Sebastian for your prompt reply.
Just checked, the name of the blob seems to be {id}_0
, so _0
appended to the ID. Will try that, doing some more testing now.
that _0 at the end actually the version number. so when getting the asset name and URL you can also get the version and create the actual blob URL from that…
I use the azure storage as asset location and that storage is also mapped to a CDN site. So in some cases when I need the images to come from the CDN site directly I can construct the URL as follows:
const url_format = "https://myCDNsite/etc-squidex-assets/39f5cacb-bc68-4cc4-b4cd-4631fe4f2bcd";
const img = heroBackgroundImage[0].id;
const version = heroBackgroundImage[0].version;
const cdn = `${url_format}_${img}_${version}`;
1 Like