fix: normalize canvas image urls for server zip download
This commit is contained in:
parent
31b6e549b4
commit
171b4dce60
@ -46,6 +46,15 @@ function sanitizeFolderName(value: string): string {
|
||||
return cleaned || `canvas-images-${Date.now()}`;
|
||||
}
|
||||
|
||||
function getRequestOrigin(request: NextRequest): string {
|
||||
const forwardedHost = (request.headers.get("x-forwarded-host") || "").split(",")[0]?.trim();
|
||||
const forwardedProto = (request.headers.get("x-forwarded-proto") || "").split(",")[0]?.trim();
|
||||
if (forwardedHost && forwardedProto) {
|
||||
return `${forwardedProto}://${forwardedHost}`;
|
||||
}
|
||||
return new URL(request.url).origin;
|
||||
}
|
||||
|
||||
function toDownloadItems(input: unknown, origin: string): DownloadFileItem[] {
|
||||
if (!Array.isArray(input)) return [];
|
||||
return input
|
||||
@ -79,7 +88,7 @@ export async function POST(request: NextRequest) {
|
||||
}
|
||||
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const requestOrigin = new URL(request.url).origin;
|
||||
const requestOrigin = getRequestOrigin(request);
|
||||
const files = toDownloadItems((body as any)?.files, requestOrigin);
|
||||
const folderName = sanitizeFolderName(String((body as any)?.folderName || ""));
|
||||
|
||||
|
||||
@ -537,11 +537,18 @@ export function CanvasWorkspace() {
|
||||
|
||||
const now = new Date();
|
||||
const folderName = `canvas-images-${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, "0")}${String(now.getDate()).padStart(2, "0")}-${String(now.getHours()).padStart(2, "0")}${String(now.getMinutes()).padStart(2, "0")}${String(now.getSeconds()).padStart(2, "0")}`;
|
||||
const browserOrigin = typeof window !== "undefined" ? window.location.origin : "";
|
||||
const files = selectedImageNodes
|
||||
.map((node, index) => {
|
||||
const nodeData = node.data as any;
|
||||
const imageUrl = String(nodeData?.src || "").trim();
|
||||
if (!imageUrl) return null;
|
||||
const rawImageUrl = String(nodeData?.src || "").trim();
|
||||
if (!rawImageUrl) return null;
|
||||
let imageUrl = rawImageUrl;
|
||||
if (browserOrigin && rawImageUrl.startsWith("/")) {
|
||||
imageUrl = `${browserOrigin}${rawImageUrl}`;
|
||||
} else if (browserOrigin && rawImageUrl.startsWith("//")) {
|
||||
imageUrl = `${window.location.protocol}${rawImageUrl}`;
|
||||
}
|
||||
const name =
|
||||
String(nodeData?.title || "").trim() ||
|
||||
String(nodeData?.prompt || "").trim() ||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user