This commit is contained in:
Hk-Gosuto 2024-02-11 10:13:30 +08:00
parent fee45f7b23
commit c8b7378b70
2 changed files with 49 additions and 1 deletions

37
app/api/cors/route.ts Normal file
View File

@ -0,0 +1,37 @@
import { NextRequest, NextResponse } from "next/server";
async function handle(req: NextRequest) {
if (req.method === "OPTIONS") {
return NextResponse.json({ body: "OK" }, { status: 200 });
}
const targetUrl = req.nextUrl.searchParams.get("url");
if (!targetUrl) {
return NextResponse.json({ body: "Bad Url" }, { status: 500 });
}
const method = req.headers.get("method") ?? undefined;
const fetchOptions: RequestInit = {
headers: {
authorization: req.headers.get("authorization") ?? "",
},
method,
// @ts-ignore
duplex: "half",
};
const fetchResult = await fetch(targetUrl, fetchOptions);
console.log("[Any Proxy]", targetUrl, {
status: fetchResult.status,
statusText: fetchResult.statusText,
});
return fetchResult;
}
export const GET = handle;
export const OPTIONS = handle;
export const runtime = "edge";

View File

@ -515,6 +515,17 @@ export function ImagePreviewer(props: {
} }
}; };
const markdownImageUrlCorsProcess = (markdownContent: string) => {
const updatedContent = markdownContent.replace(
/!\[.*?\]\((.*?)\)/g,
(match, url) => {
const updatedURL = `/api/cors?url=${encodeURIComponent(url)}`;
return `![image](${updatedURL})`;
},
);
return updatedContent;
};
return ( return (
<div className={styles["image-previewer"]}> <div className={styles["image-previewer"]}>
<PreviewActions <PreviewActions
@ -580,7 +591,7 @@ export function ImagePreviewer(props: {
<div className={styles["body"]}> <div className={styles["body"]}>
<Markdown <Markdown
content={m.content} content={markdownImageUrlCorsProcess(m.content)}
imageBase64={m.image_url} imageBase64={m.image_url}
fontSize={config.fontSize} fontSize={config.fontSize}
defaultShow defaultShow