diff --git a/README.md b/README.md index da600557..b23f3bd2 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,8 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 1. 添加[Midjourney-Proxy](https://github.com/novicezk/midjourney-proxy)接口的支持: + [x] /mj/submit/imagine + [x] /mj/submit/change - + [x] /mj/task/{id}/fetch + + [x] /mj/image/{id} (通过此接口获取图片,**请必须在系统设置中填写服务器地址!!**) + + [x] /mj/task/{id}/fetch (此接口返回的图片地址为经过One API转发的地址) + 使用方法:渠道类型选择自定义渠道,Base URL填写Midjourney-Proxy的地址(例如 http://localhost:8080 ),模型填入自定义模型midjourney,密钥填写Midjourney-Proxy的mj-api-secret(没有的话可以随便填)。 2. 支持在线充值功能,可在系统设置中设置,当前支持的支付接口: + [x] 易支付 diff --git a/controller/relay-mj.go b/controller/relay-mj.go index f8bd751d..211480f7 100644 --- a/controller/relay-mj.go +++ b/controller/relay-mj.go @@ -31,6 +31,32 @@ type Midjourney struct { FailReason string `json:"failReason"` } +func RelayMidjourneyImage(c *gin.Context) { + taskId := c.Param("id") + midjourneyTask := model.GetByMJId(taskId) + if midjourneyTask == nil { + c.JSON(400, gin.H{ + "error": "midjourney_task_not_found", + }) + return + } + resp, err := http.Get(midjourneyTask.ImageUrl) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "http_get_image_failed", + }) + } + defer resp.Body.Close() + data, err := io.ReadAll(resp.Body) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.Header("Content-Type", "image/jpeg") + //c.Header("Content-Length", string(rune(len(data)))) + c.Data(http.StatusOK, "image/jpeg", data) +} + func relayMidjourneyNotify(c *gin.Context) *MidjourneyResponse { var midjRequest Midjourney err := common.UnmarshalBodyReusable(c, &midjRequest) @@ -88,7 +114,7 @@ func relayMidjourneyTask(c *gin.Context, relayMode int) *MidjourneyResponse { midjourneyTask.SubmitTime = originTask.SubmitTime midjourneyTask.StartTime = originTask.StartTime midjourneyTask.FinishTime = originTask.FinishTime - midjourneyTask.ImageUrl = originTask.ImageUrl + midjourneyTask.ImageUrl = common.ServerAddress + "/mj/image/" + originTask.MjId midjourneyTask.Status = originTask.Status midjourneyTask.FailReason = originTask.FailReason midjourneyTask.Action = originTask.Action diff --git a/router/relay-router.go b/router/relay-router.go index 5eea2048..051309ad 100644 --- a/router/relay-router.go +++ b/router/relay-router.go @@ -42,6 +42,7 @@ func SetRelayRouter(router *gin.Engine) { relayV1Router.POST("/moderations", controller.Relay) } relayMjRouter := router.Group("/mj") + relayMjRouter.GET("/image/:id", controller.RelayMidjourneyImage) relayMjRouter.Use(middleware.TokenAuth(), middleware.Distribute()) { relayMjRouter.POST("/submit/imagine", controller.RelayMidjourney) @@ -49,4 +50,5 @@ func SetRelayRouter(router *gin.Engine) { relayMjRouter.POST("/notify", controller.RelayMidjourney) relayMjRouter.GET("/task/:id/fetch", controller.RelayMidjourney) } + //relayMjRouter.Use() }