如何 return 使用 golang rest api 来转发文件或图像路径 url?

How to return a files or images path urls to forntend using golang rest apis?

我的后端使用 Golang(gin-gonic 框架)。我开发了以下 rest API 来从前端应用程序接收图像或文件。我在这条路径“/home/user/Desktop/files/”+dt.String()+“_”+filepath.Base(file.Filename) 中保存文件。到目前为止一切正常,我可以看到保存的文件。

现在我打算return这些文件路径通过另一个休息API(例如:API:/getImageUrl,响应:https://via.placeholder.com/600/771796)以便用户可以下载文件。但我不确定如何 return 这些文件路径 URLs 到前端。有人可以指导我如何开发休息 API 吗?

               requests.POST("/upload", func(c *gin.Context) {

                    // Source
                    file, err := c.FormFile("file")
                    if err != nil {
                        c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
                        return
                    }

                    dt := time.Now()

                    filename := "/home/user/Desktop/files/"+dt.String()+"_"+filepath.Base(file.Filename)

                    if err := c.SaveUploadedFile(file, filename); err != nil {
                        c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
                        return
                    }

                    c.JSON(200, gin.H{"message": "Files Uploaded Successfully"})
                }) 

首先,您应该将图像名称存储在数据库中。

要在 gin 中提供静态资产(图像文件),您必须定义静态路由。

router := gin.Default()
router.Static("/image", "./path-to-image-dir")

文件路径看起来像这样

http://myapp.com/image/filename.jpg

但我会建议您使用自定义 header 来使用 bind-header 方法提供图像内容,这样您将拥有更多控制权。您可以在杜松子酒文档中阅读更多相关信息。

https://github.com/gin-gonic/gin#bind-header