mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-16 05:04:42 +08:00
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { Router, Request, Response } from "express";
|
|
import { Readable } from "node:stream";
|
|
|
|
const router = Router();
|
|
|
|
router.get("/", async (req: Request, res: Response) => {
|
|
const imageUrl = req.query.url as string;
|
|
|
|
if (!imageUrl) {
|
|
return res.status(400).send("Missing image URL");
|
|
}
|
|
|
|
try {
|
|
const imageResponse = await fetch(imageUrl, {
|
|
headers: {
|
|
Referer: "https://movie.douban.com/",
|
|
"User-Agent":
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
|
|
},
|
|
});
|
|
|
|
if (!imageResponse.ok) {
|
|
return res.status(imageResponse.status).send(imageResponse.statusText);
|
|
}
|
|
|
|
const contentType = imageResponse.headers.get("content-type");
|
|
if (contentType) {
|
|
res.setHeader("Content-Type", contentType);
|
|
}
|
|
|
|
if (imageResponse.body) {
|
|
const nodeStream = Readable.fromWeb(imageResponse.body as any);
|
|
nodeStream.pipe(res);
|
|
} else {
|
|
res.status(500).send("Image response has no body");
|
|
}
|
|
} catch (error) {
|
|
console.error("Image proxy error:", error);
|
|
res.status(500).send("Error fetching image");
|
|
}
|
|
});
|
|
|
|
export default router;
|