Kako se upravlja slikama artikala?

Autor: 5 min čitanja

Slike su ključni dio prodajne stranice, ali i najčešći izvor sporog učitavanja i velikog prometa. WebShopHR slikama pristupa tako da se uploadaju u originalnoj kvaliteti, a kupcu se serviraju optimizirane verzije: smanjene, pretvorene u WebP i potpisane sigurnosnim ključem.

Grid slika artikla u uređivanju
Grid slika artikla u uređivanju

Upload do 5 MiB u tri formata

CMS dopušta upload slika u formatima JPEG, PNG i WebP, do maksimalne veličine od 5 MiB po slici. Ako kupac ili trgovac pokuša poslati drugi format ili preveliku datoteku, sustav odmah vraća jasnu grešku. Na taj se način u samom startu štiti kvaliteta i predvidljivost kataloga.

Svaka slika dobije jedinstveni ključ unutar tenanta

Kad se slika uploada, generira se ključ koji počinje identifikatorom tenanta, zatim identifikatorom artikla, a završava slučajnim UUID-om i ekstenzijom. Struktura ključa osigurava da se slike svakog dućana drže odvojeno unutar istog spremišta, a istovremeno onemogućuje pristup slikama koje ne pripadaju određenom artiklu. Ako zapis slike zbog neke greške ne uspije u bazi odmah nakon uploada, objekt se briše iz spremišta, tako da ne ostaju siročići u skladištu.

Brisanje oslobađa prostor odmah

Kad trgovac izbriše sliku u CMS-u, baza vraća veličinu datoteke i u istoj transakciji umanjuje iskorištenu prostornu kvotu, a zatim se objekt briše iz MinIO-a. Time se osigurava da trgovac ne plaća ni koristi prostor za slike koje više ne postoje u katalogu.

Predlošci nikad ne prikazuju sirovi ključ

U predlošcima se slike umetaju isključivo kroz predložačku funkciju koja iz ključa slike gradi potpisani imgproxy URL ili, kad je imgproxy isključen, fallback rutu /slike/{ključ}. Zabranjeno je postaviti sirovi src s MinIO ključem, što štiti dvije stvari: slike uvijek prolaze kroz optimizirani put, a slučajno ne može procuriti nikakva druga datoteka koja se nalazi u spremištu.

imgproxy stvara WebP i prilagođenu veličinu po zahtjevu

Slike se u dućanu ne serviraju izravno iz spremišta, već preko imgproxyja. Taj servis u letu pretvara sliku u WebP i prilagođuje joj veličinu ovisno o kontekstu. Detaljna slika na stranici proizvoda ide na 800 piksela, sličice u popisima na 400 piksela, a veće slike poput hero banera mogu ići i do 1600 piksela.

Ako imgproxy nije konfiguriran, sustav graciozno pada na izravnu rutu /slike/{ključ}, tako da slike nikad ne nestanu zbog nedostajuće konfiguracije.

URL-ovi su potpisani HMAC-SHA256

imgproxy URL-ovi nose kriptografski potpis izračunat HMAC-SHA256 algoritmom. Bez potpisa imgproxy odbija servirati sliku, što sprječava zloupotrebu: nitko ne može sastaviti proizvoljni resize URL i koristiti dućan kao besplatni servis za slike. U produkciji aplikacija odbija startati ako je postavljen URL imgproxyja, a nedostaju ključ i salt. Nikad se ne koriste javno poznati razvojni ključevi.

Sedmodnevno javno keširanje prilagođeno CDN-u

Javno servirane slike nose zaglavlje Cache-Control s javnim pristupom, rokom trajanja od sedam dana i oznakom immutable. To znači da preglednici i CDN mjesto drže kopiju sedam dana, jer se pretpostavlja da se generirani URL više ne mijenja. Time se znatno smanjuje opterećenje na aplikaciju i ubrzava učitavanje stranica.

Alt tekst je prvorazredno polje

Svaka slika u galeriji artikla ima polje za alt tekst i redni broj. Redni broj određuje koji redoslijed slika prikazuje na stranici proizvoda, a alt tekst služi kupcima koji koriste čitače ekrana i tražilicama koje analiziraju sadržaj. Alat za potpunost kataloga upozorava ako postoji aktivni artikl sa slikom, ali bez alt teksta, pa trgovac može brzo popraviti pristupačnost i SEO.

Sigurnosna ograničenja na ruti /slike/

Ruta za javno serviranje slika provjerava točan oblik ključa: mora sadržavati identifikator tenanta, identifikator artikla i naziv datoteke s dopuštenom ekstenzijom. Putanje s .., pogrešnom ekstenzijom ili nedostajućim dijelovima se odbijaju. Ovim se štiti da se preko iste rute ne mogu dohvatiti druge datoteke koje nisu javne slike artikala, primjerice digitalni proizvodi.

Zaključak

Slike u WebShopHR-u stoga nisu tek datoteke koje se uploadaju: one se optimiziraju, potpisuju, keširaju i štite. Trgovac uploada jednu kvalitetnu sliku, a kupci svugdje dobivaju brzu, odgovarajuće veliku WebP verziju bez dodatnog posla.

Više o temi: Katalog i zalihe.

Česta pitanja.

Moram li sam smanjivati i konvertirati slike prije uploada?

Ne. Dovoljno je uploadati sliku u originalnoj kvaliteti (JPEG, PNG ili WebP do 5 MiB). Imgproxy je u letu pretvara u WebP i prilagođava veličinu ovisno o kontekstu (800 px na stranici proizvoda, 400 px u popisima).


Što ako ne konfiguriram imgproxy?

Slika se i dalje prikazuje. Sustav graciozno pada na izravnu rutu /slike/{ključ} bez greške, samo bez optimizacije i resizanja u letu.


Može li netko drugi pogoditi URL i doći do slike koja nije javna?

Ne. imgproxy URL-ovi nose HMAC-SHA256 potpis, pa se ne mogu izmijeniti ni sastaviti izvana bez ključa. Aplikacija u produkciji odbija startati ako ključ i salt nisu postavljeni.


Što se dogodi s prostorom kad izbrišem sliku?

Skladišna kvota trgovine se oslobađa odmah, u istoj transakciji u kojoj se zapis slike briše iz baze, prije nego što se objekt ukloni iz spremišta.


Utječe li nedostatak alt teksta na SEO kataloga?

Da, pa alat za potpunost kataloga to i prijavljuje. Upozorava ako aktivni artikl ima sliku, ali bez popunjenog alt teksta.

Povezani vodiči.

Otvori vlastiti webshop u par minuta.

Besplatan paket traje bez roka i ne traži karticu.