微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载发生在我的基于gin-golang的定制REST服务器端,但没有发生在客户端

如何解决下载发生在我的基于gin-golang的定制REST服务器端,但没有发生在客户端

我正在使用gin-gonic在golang中创建一个HTTP REST服务器

我的代码是:

func main() {

    var port string
    if len(os.Args) == 1 {
        port = "8080"
    } else {
        port = os.Args[1]
    }

    router := gin.Default()

    router.GET("/:a/*b",func(c *gin.Context) {
        
        // My custom code to get "download" reader from some third party cloud storage.
        
        // Create the file at the server side
        out,err := os.Create(b)
        if err != nil {
            c.String(http.StatusInternalServerError,"Error in file creation at server side\n")
            return
        }
        c.String(http.StatusOK,"File created at server side\n")

        _,err = io.copy(out,download)
        if err != nil {
            c.String(http.StatusInternalServerError,"Some error occured while downloading the object\n")
            return
        }

        // Close the file at the server side
        err = out.Close()
        if err != nil {
            c.String(http.StatusInternalServerError,"Some error occured while closing the file at server side\n")
        }
        
        // Download the file from server side at client side
        c.String(http.StatusOK,"Downloading the file at client side\n")
        c.FileAttachment(objectPath,objectPath)
        c.String(http.StatusOK,"\nFile downlaoded at the client side successfully\n")
        c.String(http.StatusOK,"Object downloaded successfully\n")

    })

    // Listen and serve 
    router.Run(":"+port)    
}

当我在客户端命令提示符下运行curl命令时,它会将文件下载到我的REST服务器上,但没有在客户端上下载。但是,gin-gonic godoc说:

功能(* Context)文件
func (c *Context) File(filepath string)
File以一种有效的方式将指定的文件写入主体流。

func(* Context)FileAttachment
func (c *Context) FileAttachment(filepath,filename string)
FileAttachment以一种有效的方式将指定的文件写入主体流中。在客户端,通常将使用给定的文件名下载文件

功能(* Context)FileFromFS
func (c *Context) FileFromFS(filepath string,fs http.FileSystem)
FileFromFS以一种有效的方式将来自http.FileSystem的指定文件写入主体流。

但是,从命令提示输出中仔细观察,它打印了txt文件内容,我需要将其保存在客户端上

因此,我想通过我的自定义REST API服务器将从第三方存储区下载的内容流式传输到客户端命令提示符或浏览器。

在这里想念东西吗?
谢谢

更新:我尝试编写Content-dispositionContent-Type标头来响应,如下所示:

package main

import (
    "context"
    "fmt"
    "net/http"
    "os"
    
    "github.com/gin-gonic/gin"
)

func main() {

    var port string
    if len(os.Args) == 1 {
        port = "8080"
    } else {
        port = os.Args[1]
    }

    router := gin.Default()

    router.GET("/:a/*b",func(c *gin.Context) {
        
        param_a := c.Param("a")
        param_b := c.Param("b")
        
        reqToken := c.GetHeader("my_custom_key")

        // My custom code to get "download" reader from some third party cloud storage.

        c.String(http.StatusOK,"Downloading the object\n")


        c.Writer.Header().Add("Content-disposition",fmt.Sprintf("attachment; filename=%",param_b))
        c.Writer.Header().Add("Content-Type",c.GetHeader("Content-Type"))
        c.File(param_b)


        c.String(http.StatusOK,"Object downloaded successfully\n")

        err = download.Close()
        if err != nil {
            c.String(http.StatusInternalServerError,"Error in closing the download of the object\n")
            return
        }
        c.String(http.StatusOK,"Object downloaded completed & closed successfully\n")

    })

    // Listen and serve 
    router.Run(":"+port)    
}

现在,它显示错误,并显示以下成功消息,但仍然没有在客户端下载填充:

404 page not found
Object downloaded successfully
Object downloaded completed & closed successfully

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。