我正在尝试在golang中使用gin-gonic制作一个REST API ,它从GET请求中获取一些路径参数并下载该文件。
curl命令可以正常工作。但是,当我添加swagger UI文档时,如果下载的文件是文本或图像,它只是显示在该网页中,但我看不到任何下载选项。如果我输入视频文件的路径,浏览器会挂起。
此外,要下载的文件的MIME类型由gin-gonic正确确定。但是,要通过swagger UI 界面下载文件,我使用的是硬编码的 @Accept和@Produce swagger UI 注释注释。理想情况下,它应该自动确定 MIME 类型。
目前,响应类型被列为下拉列表,我可以在其中获得各种选项。我需要它来自动检测正确的 MIME 类型并尽可能显示下载按钮
我的 GET 请求代码是:
// DownloadObject godoc
// @Summary Download object
// @Description Download object
// @Produce application/json
// @Produce text/plain
// @Produce application/octet-stream
// @Produce video/mp4
// @Produce image/png
// @Produce image/jpeg
// @Produce image/gif
// @Param rootPath path string true "Root Path"
// @Param filePath path string true "File Path"
// @Header 200 {string} Token "qwerty"
// @Router /transfer/{rootPath}/{filePath} [get]
func DownloadObject(c *gin.Context) {
// Get rootPath & filePath from GET request
rootPath := c.Param("rootPath")
filePath := c.Param("filePath")
// Some code to get an io.Reader object "download"
_, err = io.Copy(c.Writer, download)
if err != nil {
c.Status(http.StatusInternalServerError)
log.Print(err)
return
}
err = download.Close()
if err != nil {
c.Status(http.StatusInternalServerError)
log.Print(err)
return
}
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%", filePath))
c.Writer.Header().Add("Content-Type", c.GetHeader("Content-Type"))
// Object download completed & closed successfully
}
我在这里错过了什么吗?
眼眸繁星
相关分类