[n8n] Issue when getting image link from the table [enterprise edition]

When i’m getting record from n8n, i can’t use the image URL to access the image itself. Only in the case if i’m logged in the Seatable account.

I want to show the thumbnails on my website. How can i get those links publicly visible?

Use the n8n Action „get public url“.

Unfortunately I haven’t find such an option in n8n

You have to install the latest version of the SeaTable community node:

Thank you. I’ve installed this. Can I ask how to better do in this situation? For example after getting rows, I’m receiving data in such format:


As you can see i get an array of images with paths which are not public

As by logic i guessed that i have to use the node which called “asset:getPublicUrl” but this node is working only with single path and can’t process the array of paths.

How can I keep the same array structure of public links output as original assets. for example like this:

Really? It is not that difficult.
Peek 2024-06-04 17-00

Probably I made my question wrong. Well, I will try to explain more accurate. For example, after getting all records, i got 2 records, where: first record contains array with 3 pictures, second row contains an array with 2 pictures.

After applying module “asset:getPublicUrl” in the output i want to receive the same object structure as original row object but asset URL will be replaced with download URL. Here is a scheme:

How to perform this bulk transform?

Hi @kingbest1195 ,
This was kind of tricky, and here is the solution I found, probably not the most elegant, but at least working:


I tested with two rows, one containing two images, and the other one containing three images

I used a Split Out node to go from this two items to 5 different items (the two first images + the three other images) before getting the public URLs, and then a Code node with the following code :

let links=[];
let rowData=[];
// Loop over the outputs of the asset: getPublicURL node to create an array of public urls
for (const item of $input.all()) {
  links.push(item.json);
}
let i = 0;
// Loop over the outputs of the row: list node and adding the publicURL key and value to the corresponding image
for (const data of $('SeaTable row:getAll').all()) {
  for (let img of data.json.image) {
    img.publicURL = links[i].download_link;
    i++;
  }
  rowData.push(data);
}
return rowData;

Hope this helps,
Benjamin

2 Likes

Thank you Benjamin, i’m trying this way now!

Thank you a lot, Benjamin! This way works amazing! Speed of course not ideal but solvable with caching.

Maybe i will figure out how to speed up this workflow myself

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.