Wichtigste Erkenntnisse
- Nehmen Sie ein einzelnes autorisiertes Produktbild entgegen und begrenzen Sie dessen Bytegröße, bevor die kostenpflichtige Verarbeitung beginnt.
- Erstellen Sie ein versioniertes WebP-Derivat mit fit-Größenänderung und deaktiviertem Zoom, damit kleine Quellen nicht vergrößert werden.
- Bewahren Sie Azure-Konto, Container und Schlüssel in Template-Zugangsdaten auf statt in Assembly-Feldern oder Browser-Code.
Produktbilder treffen oft als überdimensionierte Kameradateien ein, während Katalogseiten ein vorhersehbares Auslieferungs-Asset benötigen. Lädt man die Quelle direkt zu Azure hoch, bleiben Format, Abmessungen, Metadaten, Cache-Verhalten und Prüfzugriff getrennten Codepfaden überlassen. Ein gesperrtes dreistufiges Template erzeugt ein einziges Derivat, dessen dauerhafte Speicheridentität und dessen temporäre Prüf-URL unterschiedliche Rollen haben; die Grenze für anonymen Zugriff ergibt sich aus den Konto- und Container-Einstellungen in Azure.
Worauf es besonders ankommt
- Legen Sie Content-Type und ein für die Prüfung sicheres Cache-Control bewusst fest, statt sich auf Vermutungen des Ziels zu verlassen.
- Behandeln Sie eine SAS-URL als temporären Bearer-Zugriff und speichern Sie den Blob-Pfad, nicht die signierte URL, als dauerhafte Identität.
- Gleichen Sie den erfolgreichen Export vor der Veröffentlichung mit genau dem Produkt, der Quellversion, der Workflow-Version und der Assembly-ID ab.
Identität von Quelle, Verarbeitung und Speicher modellieren
Ein hochgeladenes Produktfoto ist die Eingabe für einen Workflow und kein Veröffentlichungsereignis im Katalog. Authentifizieren Sie die hochladende Person, autorisieren Sie den Produktdatensatz, validieren Sie den erkannten Bildtyp und die Byte-Größe und legen Sie einen dauerhaften Verarbeitungsvorgang an, bevor Sie das Assembly-Ergebnis akzeptieren. Bewahren Sie die bearbeitbare oder hochauflösende Quelle unter einer ausdrücklichen Aufbewahrungsrichtlinie auf, statt anzunehmen, dass das WebP-Derivat sie ersetzen kann.
Geben Sie jedem Derivat eine Workflow-Version. Der Datensatz der Anwendung sollte das Produkt und die Quellversion diesem Workflow, seiner Assembly-ID sowie dem resultierenden Azure-Container und Blob-Pfad zuordnen. So kann eine spätere Qualitätsänderung ein neues Derivat erzeugen, ohne die geprüfte Version zu überschreiben oder den Weg zurück zu ihrer Quelle zu verlieren.
Quellidentität
Das Produkt, der ursprüngliche Upload, die Prüfsumme oder Version und die Aufbewahrungsrolle.
Verarbeitungsidentität
Die gespeicherte Workflow-Version und die Assembly, die das Derivat erzeugt hat.
Speicheridentität
Die Azure-Kontogrenze, der Container und der versionierte Blob-Pfad.
Das Azure-Template für Produktbilder erstellen
Das Template nimmt eine einzelne Datei über :original entgegen, übergibt sie an /image/resize und exportiert nur das resultierende WebP über /azure/store. Die Größenänderung mit der Strategie fit hält das vollständige Bild innerhalb des angeforderten Rahmens, während zoom mit dem Wert false verhindert, dass eine kleine Quelle vergrößert wird. Der versionierte Pfad enthält eine Produktkennung, die erst nach der Autorisierung durch die Anwendung bereitgestellt wird, sowie die Eindeutigkeit der Assembly.
Setzen Sie allow_steps_override auf false, damit ein Upload-Client das Ziel nicht ersetzen, keine größere Arbeitslast anfordern und die Verarbeitung nicht umgehen kann. Das Objekt auth im Template begrenzt die Anzahl und die Gesamtgröße der akzeptierten Uploads. Diese Grenzen verringern versehentliche Arbeitslast, doch die Anwendung muss weiterhin die Mandantenzugehörigkeit, den zulässigen Produktzustand, Rate Limits und einen erlaubten Wert für product_id durchsetzen.
{
"allow_steps_override": false,
"auth": {
"max_number_of_files": 1,
"max_size": 52428800
},
"steps": {
":original": {
"robot": "/upload/handle"
},
"product_webp": {
"use": ":original",
"robot": "/image/resize",
"width": 1600,
"height": 1600,
"resize_strategy": "fit",
"zoom": false,
"format": "webp",
"quality": 82,
"strip": true
},
"azure_review": {
"use": "product_webp",
"robot": "/azure/store",
"credentials": "azure-product-images",
"path": "catalog/web-v1/${fields.product_id}/${assembly.id}/${file.url_name}",
"content_type": "image/webp",
"cache_control": "private, no-store",
"metadata": {
"workflow": "catalog-web-v1",
"source_id": "${fields.product_id}"
},
"sas_expires_in": 900,
"sas_permissions": "r",
"result": true
}
}
}Blob-Eigenschaften und Metadaten als Teil des Asset-Vertrags festlegen
Ein versioniertes WebP sollte den Workflow mit einem ausdrücklich angegebenen Content-Type verlassen. Das Beispiel verwendet während der Prüfung das Caching private, no-store, damit eine ablaufende SAS-Antwort nicht in einem gemeinsam genutzten Cache verbleibt. Da /azure/store cache_control auf den gespeicherten Blob schreibt, bleibt dieser Wert private, no-store am Objekt bestehen. Wenn derselbe Blob später mit einer Caching-Richtlinie ausgeliefert werden soll, müssen Sie dessen Cache-Control zurücksetzen oder ein neues Derivat erzeugen, statt anzunehmen, dass sich der Wert aus der Prüfphase von selbst aufhebt. Speichern Sie stabile, nicht sensible Metadaten wie den Workflow-Namen und die Kennung des Quelldatensatzes, wenn Betreiber einen Blob nachverfolgen müssen, ohne die Anwendungsdatenbank zu öffnen.
Legen Sie keine Geheimnisse, keine personenbezogenen Daten und keinen unbegrenzten Browser-Wert in Azure-Metadaten oder -Pfaden ab. Behandeln Sie product_id als validierte Kennung der Anwendung mit dokumentierter Zeichen- und Längenbegrenzung. /azure/store wandelt Metadatenwerte vom Typ String, Number und Boolean in Strings um, daher sollten nachgelagerte Systeme nicht erwarten, dass die ursprünglichen JSON-Typen erhalten bleiben.
Eine SAS-URL nur für eine kurzlebige Prüfung verwenden
/azure/store gibt die signierte URL im Feld sas_url des Ergebnisses zurück; das gewöhnliche Feld url ist unsigniert. Der Upload erzeugt auch dann eine SAS, wenn sas_expires_in weggelassen wird, und verwendet dabei eine serverseitige Standardlebensdauer. Wird sas_permissions weggelassen, gilt ein schreibfähiger Standardwert und kein ausschließlich lesender Zugriff. Dieses Beispiel setzt sas_permissions ausdrücklich auf r und sas_expires_in auf 900 Sekunden. Setzen Sie beide Werte, statt sich für den Prüfzugriff auf Standardwerte zu verlassen.
Der Robot konfiguriert keinen anonymen Zugriff. Halten Sie den Ziel-Container privat und prüfen Sie die Einstellung AllowBlobPublicAccess des Speicherkontos; wird anonymer Zugriff auf Kontoebene untersagt, überschreibt das die Container-Einstellungen. Wer die SAS-URL erhält, kann deren delegierten Zugriff während der Gültigkeitsdauer nutzen. Protokollieren Sie sie daher nicht, nehmen Sie sie nicht in Analytics auf, senden Sie sie nicht an unbeteiligte Clients und speichern Sie sie nicht als dauerhafte URL des Katalog-Assets.
Speichern Sie den Container und den Blob-Pfad dauerhaft als Identität. Wenn eine prüfende Person später Zugriff benötigt, sollte die Anwendung diese Anfrage autorisieren und den Zugriff gemäß ihrem aktuellen Auslieferungskonzept ausstellen oder beschaffen. Ein erfolgreicher SAS-Abruf belegt, dass das Objekt mit diesem Token gelesen werden kann; er genehmigt das Asset nicht, erteilt keine Veröffentlichung im Katalog und ersetzt keine Autorisierung auf Produktebene.
Bildverhalten vor der Katalogumstellung überprüfen
Der Step für die Größenänderung setzt strip auf true, wodurch alle eingebetteten Metadaten einschließlich des ICC-Farbprofils aus dem Derivat entfernt werden. Testen Sie die EXIF-Ausrichtung, breite und hohe Bilder, transparente Eingaben, das Verhalten von Farbprofilen, sehr kleine Quellen, sehr große Abmessungen, Animationen und fehlerhafte Daten. Vergleichen Sie die gerenderte Ausgabe sowie deren MIME-Typ, Abmessungen, Byte-Größe und Speicher-Metadaten. Das Entfernen des Profils und die WebP-Konvertierung können jeweils die gerenderte Farbe oder anderes erforderliches Verhalten beeinflussen.
Prüfen Sie, ob die Azure-Konto- und Container-Einstellungen anonyme Lesezugriffe auf den Prüf-Blob verhindern. Gleichen Sie den erfolgreichen Export mit dem erwarteten Produktvorgang ab und überführen Sie den Katalogdatensatz anschließend über einen separaten autorisierten Übergang. Rollen Sie zuerst für eine kleine Traffic-Kohorte aus, beobachten Sie das Auslieferungs- und Cache-Verhalten und behalten Sie das vorherige Derivat, bis das Rollback-Fenster schließt.
Wiederherstellen, ohne Duplikate zu veröffentlichen
Ein Timeout oder ein verpasster Webhook ist ein ungewisses Ergebnis und kein Beleg dafür, dass der Blob nicht geschrieben wurde. Speichern Sie den Vorgang, bevor Sie die Assembly erstellen, und verarbeiten Sie signierte Abschlussbenachrichtigungen idempotent. Wenn die aufrufende Seite die Antwort verliert, prüfen Sie die vorhandene Assembly und den Datensatz der Anwendung, bevor Sie einen weiteren Lauf starten.
Klassifizieren Sie Fehler nach Aufnahme, Bildverarbeitung, Azure-Authentifizierung, fehlendem Container und Export. Stellen Sie Betreibern stabile Wiederherstellungsaktionen bereit und halten Sie dabei unverarbeitete Anbieterdetails geschützt. Ein neuer Workflow-Lauf sollte ein neues versioniertes Objekt erzeugen und den Katalog erst nach der Prüfung aktualisieren; das Löschen des alten Blobs gehört zu einem späteren Aufbewahrungsauftrag.
Wissenswerte technische Details
- /upload/handle muss den Namen :original tragen, darf use nicht definieren und darf nur einmal in einem Satz von Assembly Instructions vorkommen.
- /image/resize mit resize_strategy auf fit bewahrt das Seitenverhältnis und hält jede Seite innerhalb der angeforderten Grenzen. Wird zoom auf false gesetzt, verhindert das die Vergrößerung kleinerer Eingaben.
- /azure/store wendet content_type, content_encoding, content_language, cache_control und metadata auf den gespeicherten Blob an. content_disposition wird zwar akzeptiert, derzeit aber nicht auf den Blob angewendet.
- /azure/store gibt in sas_url einen signierten Zugriff für die Prüfung zurück; das reguläre Feld url ist unsigniert. sas_expires_in steuert die Gültigkeitsdauer, bei Auslassung greift ein Server-Standardwert. Wird sas_permissions weggelassen, gilt ein schreibfähiger Standardwert; explizite Werte akzeptieren r (Lesen), w (Schreiben) und d (Löschen). Dieser Workflow gewährt für die Prüfung nur r.
- /azure/store hat keinen Parameter für die Zugriffsebene. Anonymer Zugriff hängt sowohl von der Einstellung AllowBlobPublicAccess des Speicherkontos als auch von der anonymen Zugriffsebene des Containers ab. Wird anonymer Zugriff auf Kontoebene untersagt, überschreibt das die Containereinstellung.
- Eine SAS-URL gewährt allen, die über sie verfügen, während der Gültigkeitsdauer der Signatur die delegierten Berechtigungen.
- Azure-Metadatenwerte, die an /azure/store übergeben werden, können Zeichenfolgen, Zahlen oder boolesche Werte sein; der Robot wandelt sie in Zeichenfolgen um.
Ein praxisnaher Ansatz
- 1
Legen Sie zulässige Bildtypen, maximale Bytes, Zielabmessungen, Qualität und die Aufbewahrungsrichtlinie für Quelldateien fest.
- 2
Erstellen Sie eingeschränkte Azure-Template-Zugangsdaten und speichern Sie das gesperrte Template aus Upload, Größenänderung und Speicherung.
- 3
Testen Sie den echten Container mit Fixtures für Ausrichtung, Transparenz und Farbprofil sowie mit ungewöhnlich kleinen und großen Fixtures.
- 4
Gleichen Sie den Blob-Pfad ab, prüfen Sie über die kurzlebige SAS und veröffentlichen Sie anschließend über einen separaten Katalogübergang.
Wann Transloadit hilfreich ist
Verwenden Sie /upload/handle für die kontrollierte Aufnahme von Produktbildern, /image/resize für ein begrenztes WebP-Derivat und /azure/store für einen versionierten Blob in einem Container mit privatem Zugriff. Lassen Sie den Speicher-Step eine kurzlebige, nur lesende SAS-URL für die Prüfung zurückgeben, speichern Sie Container und Blob-Pfad aber dauerhaft als beständige Identität.
Architekturgrenze
Transloadit nimmt das Produktbild entgegen, erstellt ein WebP-Derivat und schreibt es in einen Azure-Blob-Storage-Container, den der Azure-Administrator oder die Anwendung für privaten Zugriff konfiguriert hat. Für Produktautorisierung, Aufbewahrung der Quelle, Katalogzustand, Auslieferungsrichtlinie und jede Entscheidung, das Derivat freizugeben oder zu ersetzen, bleibt weiterhin die Anwendung verantwortlich.
Häufig gestellte Fragen
Sollte der Katalog die SAS-URL speichern?
Nein. Eine SAS-URL ist ein temporärer Bearer-Zugriff. Speichern Sie den Azure-Container und den Blob-Pfad als dauerhafte Identität und autorisieren Sie die spätere Auslieferung unabhängig davon.
Erzeugt die fit-Größenänderung ein exaktes Quadrat?
Nein. Dabei bleibt das Seitenverhältnis erhalten, und beide Seiten bleiben innerhalb der angeforderten Grenzen. Verwenden Sie eine explizite Zuschnitt- oder Padding-Richtlinie, wenn exakte Abmessungen erforderlich sind.
Warum einen versionierten Blob-Pfad verwenden?
So können Qualitätsrichtlinien nebeneinander bestehen, das Cache-Verhalten wird vorhersehbar, und Prüfung sowie Rollback sind möglich, ohne ein bekanntes Asset zu überschreiben.
Kann der Browser den Azure-Container auswählen?
Nein. Bewahren Sie Konto, Container und Schlüssel in den gesperrten Template-Zugangsdaten auf. Eine vertrauenswürdige Anwendung darf erst nach der Autorisierung eine begrenzte Produktkennung übergeben.
Veröffentlicht ein erfolgreicher Export das Produktbild?
Nein. Er belegt, dass das Derivat Azure erreicht hat. Die Veröffentlichung im Katalog bleibt ein separater Zustandsübergang in der Anwendung.