Просмотр исходного кода

feat: 改为转发的方式获取midjourney图片

CaIon 2 лет назад
Родитель
Сommit
84645128c3
3 измененных файлов с 31 добавлено и 2 удалено
  1. 2 1
      README.md
  2. 27 1
      controller/relay-mj.go
  3. 2 0
      router/relay-router.go

+ 2 - 1
README.md

@@ -62,7 +62,8 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 
 1. 添加[Midjourney-Proxy](https://github.com/novicezk/midjourney-proxy)接口的支持:
 1. 添加[Midjourney-Proxy](https://github.com/novicezk/midjourney-proxy)接口的支持:
     + [x] /mj/submit/imagine
     + [x] /mj/submit/imagine
     + [x] /mj/submit/change
     + [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(没有的话可以随便填)。
    + 使用方法:渠道类型选择自定义渠道,Base URL填写Midjourney-Proxy的地址(例如 http://localhost:8080 ),模型填入自定义模型midjourney,密钥填写Midjourney-Proxy的mj-api-secret(没有的话可以随便填)。
 2. 支持在线充值功能,可在系统设置中设置,当前支持的支付接口:
 2. 支持在线充值功能,可在系统设置中设置,当前支持的支付接口:
     + [x] 易支付
     + [x] 易支付

+ 27 - 1
controller/relay-mj.go

@@ -31,6 +31,32 @@ type Midjourney struct {
 	FailReason  string `json:"failReason"`
 	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 {
 func relayMidjourneyNotify(c *gin.Context) *MidjourneyResponse {
 	var midjRequest Midjourney
 	var midjRequest Midjourney
 	err := common.UnmarshalBodyReusable(c, &midjRequest)
 	err := common.UnmarshalBodyReusable(c, &midjRequest)
@@ -88,7 +114,7 @@ func relayMidjourneyTask(c *gin.Context, relayMode int) *MidjourneyResponse {
 	midjourneyTask.SubmitTime = originTask.SubmitTime
 	midjourneyTask.SubmitTime = originTask.SubmitTime
 	midjourneyTask.StartTime = originTask.StartTime
 	midjourneyTask.StartTime = originTask.StartTime
 	midjourneyTask.FinishTime = originTask.FinishTime
 	midjourneyTask.FinishTime = originTask.FinishTime
-	midjourneyTask.ImageUrl = originTask.ImageUrl
+	midjourneyTask.ImageUrl = common.ServerAddress + "/mj/image/" + originTask.MjId
 	midjourneyTask.Status = originTask.Status
 	midjourneyTask.Status = originTask.Status
 	midjourneyTask.FailReason = originTask.FailReason
 	midjourneyTask.FailReason = originTask.FailReason
 	midjourneyTask.Action = originTask.Action
 	midjourneyTask.Action = originTask.Action

+ 2 - 0
router/relay-router.go

@@ -42,6 +42,7 @@ func SetRelayRouter(router *gin.Engine) {
 		relayV1Router.POST("/moderations", controller.Relay)
 		relayV1Router.POST("/moderations", controller.Relay)
 	}
 	}
 	relayMjRouter := router.Group("/mj")
 	relayMjRouter := router.Group("/mj")
+	relayMjRouter.GET("/image/:id", controller.RelayMidjourneyImage)
 	relayMjRouter.Use(middleware.TokenAuth(), middleware.Distribute())
 	relayMjRouter.Use(middleware.TokenAuth(), middleware.Distribute())
 	{
 	{
 		relayMjRouter.POST("/submit/imagine", controller.RelayMidjourney)
 		relayMjRouter.POST("/submit/imagine", controller.RelayMidjourney)
@@ -49,4 +50,5 @@ func SetRelayRouter(router *gin.Engine) {
 		relayMjRouter.POST("/notify", controller.RelayMidjourney)
 		relayMjRouter.POST("/notify", controller.RelayMidjourney)
 		relayMjRouter.GET("/task/:id/fetch", controller.RelayMidjourney)
 		relayMjRouter.GET("/task/:id/fetch", controller.RelayMidjourney)
 	}
 	}
+	//relayMjRouter.Use()
 }
 }