flux / app.js
gitdeem's picture
Upload app.js
ba5aa63 verified
raw
history blame
3.66 kB
import express from "express";
import bodyParser from "body-parser";
import dotenv from "dotenv";
import fetch from "node-fetch";
import fs from "fs";
import path from "path";
dotenv.config();
const app = express();
app.use(bodyParser.json());
// 创建图片保存目录
const imageDir = path.join(process.cwd(), "images");
if (!fs.existsSync(imageDir)) {
fs.mkdirSync(imageDir);
}
// 静态文件服务
app.use("/images", express.static(imageDir));
app.get("/", (req, res) => {
res.send(`
<html>
<head>
<title>OPENAI</title>
</head>
<body>
<h1>OpenAI</h1>
<p>Congratulations! Your project has been successfully deployed.</p>
</body>
</html>
`);
});
app.post("/deem/v1/chat/completions", async (req, res) => {
try {
const data = req.body;
const messages = data.messages;
const lastMessage = messages[messages.length - 1];
const messagesContent = lastMessage.content;
const apiUrl = `https://api-flux1.api4gpt.com/?prompt=${messagesContent}`;
const apiResponse = await fetch(apiUrl);
if (!apiResponse.ok) {
throw new Error("文生图服务失效:" + apiResponse.status);
}
const imageBuffer = await apiResponse.buffer();
// 生成唯一的文件名
const fileName = `image_${Date.now()}.jpg`;
const filePath = path.join(imageDir, fileName);
// 保存图片到本地
fs.writeFileSync(filePath, imageBuffer);
// 构建本地图片URL
const imgUrl = `/images/${fileName}`;
console.log(imgUrl);
if (imgUrl) {
const chunkId = `chatcmpl-${Date.now()}`;
const chunkCreated = Math.floor(Date.now() / 1000);
res.write(
"data: " +
JSON.stringify({
id: chunkId,
object: "chat.completion.chunk",
created: chunkCreated,
model: req.body.model,
choices: [
{
index: 0,
delta: {
content: `![](${imgUrl})`,
},
finish_reason: null,
},
],
}) +
"\n\n"
);
res.write("data: [DONE]\n\n");
res.end();
} else {
res.status(500).json({ error: "图片保存失败" });
}
} catch (error) {
console.error("Error:", error);
res.status(500).json({ error: error.message });
}
});
app.post("/deem/v1/images/generations", async (req, res) => {
try {
const data = req.body;
const messages = data.prompt;
const apiUrl = `https://api-flux1.api4gpt.com/?prompt=${messages}`;
const apiResponse = await fetch(apiUrl);
if (!apiResponse.ok) {
throw new Error("文生图服务失效:" + apiResponse.status);
}
const imageBuffer = await apiResponse.buffer();
// 生成唯一的文件名
const fileName = `image_${Date.now()}.jpg`;
const filePath = path.join(imageDir, fileName);
// 保存图片到本地
fs.writeFileSync(filePath, imageBuffer);
// 构建本地图片URL
const imgUrl = `/images/${fileName}`;
console.log(imgUrl);
if (imgUrl) {
const chunkCreated = Math.floor(Date.now() / 1000);
res.json({
created: chunkCreated,
data: [
{
url: imgUrl,
},
],
});
} else {
res.status(500).json({ error: "图片保存失败" });
}
} catch (error) {
console.error("Error:", error);
res.status(500).json({ error: error.message });
}
});
app.listen(process.env.PORT || 3000);