Wichtige Aktualisierung zur Verwendung generierter Download-Links für Dateien

Liebe Tripo-Nutzerinnen und -Nutzer,
wir schreiben Ihnen, um Sie über eine bevorstehende Änderung zu informieren, die sich darauf auswirken kann, wie Sie auf Ressourcen unserer Plattform zugreifen und diese verwenden.
Was ändert sich?
Wir werden die CORS-Richtlinie durchsetzen für alle generierten Artifact-URLs. Das bedeutet, dass für alle auf unserer Plattform gehosteten Ressourcen eine geeignete Handhabung von Cross-Origin-Requests erforderlich ist, oder anders gesagt: Sie können generierte Modelldateien nicht direkt über den Link bereitstellen, den Ihnen die Tripo API zurückgibt.
Warum wird das umgesetzt?
Diese Änderung ist Teil unseres Engagements zur Verbesserung der Sicherheit und zur Verhinderung unbefugten Zugriffs auf Ressourcen über verschiedene Origins hinweg. CORS (Cross-Origin Resource Sharing) ist ein Mechanismus, mit dem Server festlegen können, welche externen Domains auf Ressourcen zugreifen dürfen.
Weitere Informationen dazu, was CORS ist, finden Sie im Leitfaden von MDN.
Auswirkungen auf Ihren Workflow
Derzeit stellen wir keine CORS-Header für Artifact-URLs bereit. Wenn Sie diese Ressourcen also direkt im Browser oder von externen Domains aus verwenden oder verlinken, können Probleme auftreten.
Um den fortlaufenden Zugriff auf diese Assets sicherzustellen, müssen Sie eine der folgenden Maßnahmen ergreifen:
- Artifacts herunterladen und lokal erneut speichern: Sie können die Artifacts herunterladen und in Ihrem Backend speichern. Sobald sie lokal gespeichert sind, können Sie diese Assets ohne CORS-Beschränkungen über Ihren Server bereitstellen.
- Einen Edge Proxy verwenden (z. B. Next.js API Route, Cloudflare Workers): Sie können einen Edge Proxy verwenden, um die Artifacts abzurufen und bereitzustellen, während Sie die erforderlichen CORS-Header zu den Responses hinzufügen. Zum Beispiel:
- Next.js API Route: Richten Sie eine API-Route ein, um Ressourcen von unserer Plattform abzurufen und sie mit den entsprechenden CORS-Headern weiterzuleiten.
- Cloudflare Workers: Verwenden Sie Cloudflare Workers, um beim Bereitstellen unserer Assets über Ihren Server CORS-Header hinzuzufügen.
So bereiten Sie sich vor:
- Prüfen Sie Ihre Integration: Stellen Sie sicher, dass Ihr System CORS für Artifact-URLs verarbeiten kann.
- Artifacts herunterladen und speichern: Wenn Sie keinen Edge Proxy verwenden, sollten Sie die Artifacts herunterladen und in Ihrem Backend speichern.
- Einen Edge Proxy einrichten: Wenn Sie Lösungen wie Next.js oder Cloudflare Workers verwenden, aktualisieren Sie Ihre Konfiguration, damit Assets mit geeigneten CORS-Headern bereitgestellt werden.
- Testen Sie Ihr System: Vergewissern Sie sich, dass alle Cross-Origin-Requests an unsere Plattform wie erwartet funktionieren.
Benötigen Sie praktische Code-Beispiele? Wenn Sie nicht sicher sind, wie Sie beginnen sollen, oder die Umsetzung schwierig finden, haben wir praktische Code-Snippets bereitgestellt, die Ihnen den Einstieg erleichtern. Weitere Details finden Sie im Anhang.
FAQs
- Ist meine generierte Datei verloren?
Nein. Sie können jederzeit eine neue URL über die API abrufen. - Ich gebe Ihre URL nicht direkt zurück, führe aber eine Nachbearbeitung durch. Muss ich mir Sorgen machen?
Wenn Sie unsere URL nicht direkt an Ihre Nutzerinnen und Nutzer zurückgeben, können Sie diese Änderung ignorieren. Wir empfehlen jedoch, Ihre Nutzung zu überwachen, insbesondere wenn Sie Fehlerhäufungen oder ungewöhnliches Verhalten in Ihrem System bemerken.
Benötigen Sie Unterstützung?
Wir verstehen, dass diese Änderung Aktualisierungen Ihres Workflows erfordern kann. Wenn Sie Hilfe beim Einrichten eines Edge Proxy benötigen oder Fragen zu dieser Umstellung haben, wenden Sie sich bitte an unser Support-Team unter support@tripo3d.ai.
Wir schätzen Ihre Zusammenarbeit, während wir daran arbeiten, die Sicherheit auf unserer Plattform zu erhöhen! Bleiben Sie sicher und produktiv!
Mit freundlichen Grüßen,
Das Tripo-Team
Anhang A: Ansatz zum erneuten Speichern im Backend
Wenn Sie FastAPI verwenden (was sich leicht auf jedes andere Framework oder jede andere Sprache portieren oder übertragen lässt), können Sie Ihren bestehenden Code wie folgt anpassen, um CORS zu verarbeiten und das Artifact lokal zu speichern:
Aktueller Code:
@app.post("/")
def generate(prompt: str) -> str:
resp = ... # API works
return resp.json()['url']
Sie können ihn einfach wie folgt ändern:
import httpx
import uuid
from fastapi.responses import FileResponse
from fastapi import HTTPException
@app.post("/")
def generate(prompt: str) -> str:
resp = ... # same as above
# Add the code below
file_id = str(uuid.uuid4())
with httpx.Client() as client:
# Download the artifact
response = client.get(url)
# Check if the request was successful
if response.status_code == 200:
# Then resave it
with open(f"./downloaded/{file_id}.glb", "wb") as file:
file.write(response.content)
return file_id
@app.get("/artifact/{file_id}")
def download(file_id: str) -> FileResponse:
if os.path.exists(f"./downloaded/{file_id}.glb"):
return FileResponse(f"./downloaded/{file_id}.glb")
raise HTTPException(status_code=404, detail="Item not found")
Nachdem Sie die Datei heruntergeladen und lokal gespeichert haben, sollten Sie Ihren Nutzerinnen und Nutzern die neue URL bereitstellen. Wenn Ihre Anwendung zum Beispiel unter https://app.example.com gehostet wird, sollte die URL, die Sie bereitstellen, wie folgt aussehen:
https://app.example.com/artifact/<file_id>
Dieses Code-Snippet ist nur eine Demonstration dafür, wie Sie Ihre Integration anpassen können. Es gibt jedoch einige wichtige Punkte, die Sie beachten sollten:
- Geeignete Authentifizierung hinzufügen: Stellen Sie sicher, dass die Download-Links durch geeignete Authentifizierungsmethoden geschützt sind, um unbefugten Zugriff zu verhindern.
- Zuverlässigen Speicher verwenden: Es wird empfohlen, die Dateien in zuverlässigeren Speicherlösungen zu speichern, z. B. auf dedizierten Servern oder in Cloud-Speicheroptionen wie S3-Buckets.
- Metadaten speichern: Führen Sie Aufzeichnungen über die Artifact-Metadaten in Ihrer Datenbank oder einem anderen Speichersystem für die zukünftige Verwendung (z. B. für Tracking oder Audits).
Anhang B: Edge-Proxy-Ansatz
Wenn Sie eine Single Page Application (SPA) oder einen Backend for Frontend (BFF)-Server entwickeln und Datei-Downloads und -Speicherung nicht direkt auf Ihrem Server handhaben möchten, können Sie einen Edge Proxy-Ansatz verwenden. Damit können Sie die Datei von unserem Server abrufen, die erforderlichen CORS-Header anwenden und sie dann Ihren Nutzerinnen und Nutzern bereitstellen.
Lösung 1: Datei mithilfe von Edge Functions herunterladen und erneut senden
Unten finden Sie ein Beispiel dafür, wie Sie diesen Ansatz mit Cloudflare Workers umsetzen können. Diese Lösung behandelt die CORS-Probleme, indem sie die Datei herunterlädt und unter Ihrer Domain erneut sendet.
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
// Parse the request URL
const url = new URL(request.url);
// Get the target URL from the 'url' query parameter
const targetUrl = url.searchParams.get('url');
// If no URL is provided, return an error
if (!targetUrl) {
return new Response('Please provide a URL parameter', {
status: 400,
headers: {
'Content-Type': 'text/plain',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type'
}
});
}
// Handle preflight OPTIONS request
if (request.method === 'OPTIONS') {
return handleCORS();
}
try {
// Fetch the file from the target URL
const response = await fetch(targetUrl);
// If the fetch failed, return the error
if (!response.ok) {
return new Response(`Failed to fetch from target URL: ${response.statusText}`, {
status: response.status,
headers: corsHeaders()
});
}
// Get the content type from the response or default to octet-stream
const contentType = response.headers.get('Content-Type') || 'application/octet-stream';
// Get the content disposition or create one from the URL
let contentDisposition = response.headers.get('Content-Disposition');
if (!contentDisposition) {
// Extract filename from the URL
const fileName = targetUrl.split('/').pop().split('?')[0] || 'file';
contentDisposition = `attachment; filename="${fileName}"`;
}
// Create a new response with CORS headers
const newResponse = new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: {
'Content-Type': contentType,
'Content-Disposition': contentDisposition,
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
'Cache-Control': 'public, max-age=3600' // Cache for 1 hour
}
});
return newResponse;
} catch (error) {
return new Response(`Error fetching the file: ${error.message}`, {
status: 500,
headers: corsHeaders()
});
}
}
// Handle CORS preflight requests
function handleCORS() {
return new Response(null, {
status: 204, // No content
headers: corsHeaders()
});
}
// Create CORS headers object
function corsHeaders() {
return {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Max-Age': '86400' // 24 hours
};
}
Sobald Ihr Cloudflare Worker eingerichtet ist, können Sie ihn mit dem folgenden JavaScript-Code in Ihre SPA integrieren, um die Datei abzurufen:
fetch('https://your-worker-url.workers.dev/?url=<target_url>')
.then(response => response.blob())
.then(blob => {
// Create a download link
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'downloaded-file.pdf';
document.body.appendChild(a);
a.click();
a.remove();
})
.catch(error => console.error('Error:', error));
Diese Lösung ist ideal für SPAs oder BFF-Server, die CORS-Beschränkungen umgehen müssen, während sie Dateien herunterladen und an Endnutzer bereitstellen. Die Datei wird von der Ziel-URL abgerufen, durch den Edge Proxy geleitet und mit den erforderlichen CORS-Headern bereitgestellt.
Lösung 2: Einen CORS-Header-Proxy einrichten
Wenn Sie lieber einen einfachen CORS-Proxy einrichten möchten, können Sie sich auf dieses von Cloudflare bereitgestellte Beispiel beziehen: Cloudflare Workers - CORS Header Proxy
Damit können Sie Cross-Origin-Requests einfacher handhaben und gleichzeitig die CORS-Richtlinien einhalten.
Wichtige Überlegungen:
- Authentifizierung: Stellen Sie sicher, dass Sie Ihre Edge Functions mit Authentifizierungsmethoden (z. B. API-Keys, OAuth usw.) angemessen absichern, um unbefugten Zugriff auf Ihre Dateien zu verhindern.
- Speicherung: Obwohl dieser Ansatz funktioniert, empfehlen wir weiterhin, das Artifact für die zukünftige Verwendung auf Ihrem Server zu speichern, insbesondere wenn Sie umfangreiche Downloads verwalten oder einen zuverlässigen Zugriff auf Ressourcen sicherstellen müssen.




