Golang Go语言中请教彦祖,如何根据用户请求 URI 返回不同的文件内容呢

发布于 1周前 作者 zlyuanteng 来自 Go语言

Golang Go语言中请教彦祖,如何根据用户请求 URI 返回不同的文件内容呢
假如本地有一份文件 data.txt ,内容为
name, Hello!

正常情况是用户来请求这份文件,我调用 http.ServeFile 即可。
但是如果想在不改变本地文件内容的前提下,根据不同用户请求 uri 来替换 name ,然后再返回给不同的用户,请问该如何实现呢?
难道要重写 http.ServeFile 吗

12 回复

文件名作为路由参数?如 127.0.0.1:8080/file/:fileName ?

更多关于Golang Go语言中请教彦祖,如何根据用户请求 URI 返回不同的文件内容呢的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


按照 HTTP 标准来说的话,请求 URL 是什么,最终下载的文件名就是什么,比如客户端请求的是 data1.txt ,你给他传 data.txt 的内容,用户下载的时候浏览器会根据 URL 默认文件名为 data1.txt 。
除此之外可以配置一个 Content-Disposition 头来让浏览器忽略 URL 中的文件名,使用这个头字段值里包含的信息作为文件名,具体可以去看 MDN 。

框架提供的静态文件 serve 功能如果不支持将 data1.txt 映射成 data.txt 的话,可能就得你自己指定路径读文件内容,然后 respond 给客户端。

用模板嘛。data.txt 是模板,根据不同用户的 name 去填充然后生成真正的文件保存再返回给客户。

这不就是模板渲染引擎的工作嘛!

简单来说,不存在一个固定的 data.txt ,要么事先准备好一堆不同的 txt ,要么每次请求时才生成一个特定的 txt 。

是用户的浏览器下载这个文件吗?只要设置好对应 header ,浏览器就会选择下载文件而不是直接显示内容了。
然后再把你期望的文件内容作为这个请求的 body 就行了。

作为这个响应的 body

对的。类似发送系统邮件。

Response.AppendHeader(“Content-Disposition”,“attachment;filename=FileName.txt”);
响应体传你定义后的文件内容

谢谢大家的意见啦!!!

在Go语言中,根据用户请求的URI返回不同的文件内容,通常可以通过使用HTTP服务器来实现。以下是一个简单的示例,展示了如何根据请求的URI来返回不同的文件内容:

  1. 导入必要的包

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "log"
        "net/http"
    )
    
  2. 处理请求的函数

    func handler(w http.ResponseWriter, r *http.Request) {
        uri := r.URL.Path
    
        switch uri {
        case "/file1":
            content, err := ioutil.ReadFile("path/to/file1.txt")
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            w.Write(content)
        case "/file2":
            content, err := ioutil.ReadFile("path/to/file2.txt")
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            w.Write(content)
        default:
            http.NotFound(w, r)
        }
    }
    
  3. 启动HTTP服务器

    func main() {
        http.HandleFunc("/", handler)
        fmt.Println("Starting server at :8080")
        log.Fatal(http.ListenAndServe(":8080", nil))
    }
    

在这个示例中,handler函数根据请求的URI读取并返回不同的文件内容。如果URI不匹配任何已知的文件路径,则返回404错误。记得将path/to/file1.txtpath/to/file2.txt替换为实际的文件路径。

回到顶部