mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-05-17 22:17:30 +08:00
Update
This commit is contained in:
43
backend/src/routes/image-proxy.ts
Normal file
43
backend/src/routes/image-proxy.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user