【问题标题】:golang FileServer set directorygolang FileServer 设置目录
【发布时间】:2019-05-16 13:44:37
【问题描述】:

我有一个 Golang Shell 和一个 FileServer 功能,我希望能够更改 src 目录。 这是我所拥有的:

func Server() {
    wdir, _ := os.Getwd()
    m := http.NewServeMux()
    fs := http.FileServer(http.Dir(wdir))
    m.Handle("/", http.StripPrefix("/", fs))
    s := http.Server{Addr: ":8000", Handler: m}
    m.HandleFunc("/shutdown", func(w http.ResponseWriter, r *http.Request) {
        s.Shutdown(context.Background())
    })
    if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
        log.Fatal(err)
    }
    log.Printf("Finished")
}

我有这种方式,所以如果我到达shutdown,文件服务器就会关闭。 但无论我从哪个路径启动Server(),路径始终保持不变。

所以如果我从 shell 我 cd 进入另一个文件夹并启动 Server(),我仍然会从可执行文件所在的目录中获取文件。

我想要的是,如果我从 /home/user/Downloads/shell 运行 shell 并在 shell 内将 cd 运行到 /opt,则要在服务器中显示的文件是 /opt 中的文件,而不是 @ 中的文件987654331@

【问题讨论】:

  • 你有什么问题?
  • 如何设置,以便服务器从 shell 所在的同一目录启动。
  • 你所描述的行为正是你应该得到的,假设有两件事:你正在执行一个构建的二进制文件,不是使用go run;并且您在之前启动您的应用程序之前位于正确的目录中。
  • 我使用的是go run,也许这就是问题所在。不知道如果我使用 go run 而不是构建的二进制文件,它可能会有所不同。
  • 你几乎不应该使用go run

标签: go fileserver


【解决方案1】:

您可以引入 FileServer path 作为标志并使用它来创建 FileServer。

http.FileServer(http.Dir(path + "/opt")).

请检查 go 提供的标志library

您可以在终端中将pwd 输入该标志值

【讨论】:

  • 我不希望它总是opt,我希望文件服务器从我所在的目录中提供文件。不过,我尝试了directory := flag.String("d", wdir, wdir) flag.Parse() m.Handle("/", http.FileServer(http.Dir(*directory))),但也没有工作
  • 标志的问题是我可能想重新定义一个标志,这是不允许的。我可能想先在/opt 中启动服务器,然后杀死服务器并在/home/user 中启动服务器。设置directory := flag.String("d", wdir, "directory") 将设置正确的目录,但我将无法设置服务器的新路径,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2013-03-13
  • 1970-01-01
相关资源
最近更新 更多