- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 Go 中使用 http.FileServer
将一些静态文件提供到目录中。
这就是我使用 mux 作为路由器映射它的方式:
r.PathPrefix("/download").Handler(http.StripPrefix("/download", http.FileServer(http.Dir(dirPath)))).Methods("GET")
其中 dirPath
是我的文件系统中目录的绝对路径。
现在在使用 localhost:8080/download 询问目录列表时似乎工作正常,因为它返回这样的页面
<pre>
<a href="a.xml">a.xml</a>
<a href="b.xml">b.zip</a>
</pre>
不幸的是,链接被破坏了,因为我希望它们被映射到例如 localhost:8080/download/a.xml
,而文件服务器将它们映射到 localhost:8080/a .xml
。
如何让我的目录列表在链接中保留 /download
路径前缀?
最佳答案
问题是您注册处理程序的模式:"/download"
。
它有两个问题:
生成的 URL 是错误的,因为 http.FileServer()
返回的处理程序函数生成文件和子文件夹的相对 URL;相对于传递给 http.FileServer()
的根文件夹,如果您的页面在路径 /download
下可用,则相对 URL 如 href="a .xml"
将解析为 /a.xml
,而不是 /download/a.xml
。
即使 URL 很好,文件也不会被提供,因为请求不会路由到您处理的(文件服务器处理程序)。您必须添加一个尾部斜线,因为 "/download"
只匹配这个单一路径,而不是所有以它开头的路径。添加尾部斜杠:"/download/"
它将匹配根子树 /download/*
。
所以解决方案是:
r.PathPrefix("/download/").Handler(
http.StripPrefix("/download", http.FileServer(http.Dir(dirPath))),
).Methods("GET")
这记录在 http.ServeMux
:
Patterns name fixed, rooted paths, like "/favicon.ico", or rooted subtrees, like "/images/" (note the trailing slash).
请注意,即使我们现在使用的是 "/download/"
注册路径,用户也不需要在浏览器中键入结尾的斜线,因为如果不输入,服务器将发送一个重定向到以尾部斜杠结尾的路径。这将自动发生。这也记录在 http.ServeMux
中:
If a subtree has been registered and a request is received naming the subtree root without its trailing slash, ServeMux redirects that request to the subtree root (adding the trailing slash). This behavior can be overridden with a separate registration for the path without the trailing slash. For example, registering "/images/" causes ServeMux to redirect a request for "/images" to "/images/", unless "/images" has been registered separately.
阅读相关问题:Go web server is automatically redirecting POST requests
这是一个仅使用标准库的简单文件服务器应用程序:
http.Handle("/dl/",
http.StripPrefix("/dl", http.FileServer(http.Dir("/home/bob/Downloads"))),
)
panic(http.ListenAndServe("localhost:8080", nil))
关于http - 在 golang http.FileServer() 中列出错误链接的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46403678/
我有一个带有 FileServer 函数的 Golang Shell,我希望能够更改 src 目录。这是我所拥有的: func Server() { wdir, _ := os.Getwd()
例如,用户可以将您的 url 与 linux 命令一起放在文件夹/目录中吗? 假设我的服务器包括: bin/ serverfile.go ... public/ index.h
go 核心中的 http 包存在问题。尽管响应正文中的 Content-Length 是正确的,但文件内容似乎已被缓存。在这里演示的是我正在编写的应用程序的简化版本。 package main imp
我有一个简单的文件夹: Test/ main.go Images/ image1.png image2.png index.
在 https://www.alexedwards.net/blog/serving-static-sites-with-go ,有一个静态文件服务器在单个目录中为站点提供服务的示例:static。
上次写了一个2行实现一个静态服务器的文章 今天群里有个哥们是这么写居然返回的是404 见鬼了嘛?? http.handle("/js", http.FileServer
我的 Web 应用程序需要让管理员用户在 .net core 2 应用程序中添加和删除提供的文件夹。我找到了一种提供服务文件夹列表的方法,但我找不到在配置应用程序后动态添加或删除它们的方法。 如何从应
我们有一个服务器应用程序,它将文件从 clientA 中继到 clientB、clientC、clientD 等。我们将这种文件中继称为任务。如果有很多任务在执行,那么CPU使用率会非常非常高。 我想
初学者围棋题 我有这个目录结构。 app_executable html | - index.html data | - static_file.json 我无法让它为 data/stat
我的项目结构如下: /rootfolder index.html main.js main.go 我正在尝试通过 FileServer() 提供静态 javascript 文件
我正在尝试在 Go 中启动一个 HTTP 服务器,它将使用我自己的处理程序来提供我自己的数据,但同时我想使用默认的 http FileServer 来提供文件。 我在使 FileServer 的处理程
http.FileServer 方法属于标准库 net/http,返回一个使用 FileSystem 接口 root 提供文件访问服务的 HTTP 处理器。可以方便的实现静态文件服务器。 http
目录树: . ├── main.go └── web ├── app.go └── views ├── index.html └── js
我在 Go 中使用 http.FileServer 将一些静态文件提供到目录中。 这就是我使用 mux 作为路由器映射它的方式: r.PathPrefix("/download").Handler(h
我使用 http.FileServer 提供来自 dirPath 的 jpeg 图像: http.Handle("/o/", http.StripPrefix( path.Join("/o",
我试图让 Mechanize 登录到 fileserve.com 我已经尝试了下面的代码 require 'rubygems' require 'mechanize' a =
我目前正在使用基本的 http.FileServer设置为提供一个简单的静态站点。我需要使用自定义未找到页面来处理 404 错误。我一直在研究这个问题,但我无法确定最好的解决方案是什么。 我已经看到了
今天我有一台 NAS 服务器在欧洲充当网络服务器、MySQL 和文件服务器,但现在我还需要可以从美国访问它。我的问题是延迟非常慢。我能做些什么来改善这一点 - 我可以以某种方式同步两个 NAS 站,还
我可以将 Netty 与 Resteasy 一起使用或作为 Fileserver : public void file() { ServerBootstrap bootstrap = new
我正在用 Go 制作一个小型独立服务。 UI 需要一些 JS 库,所以我想,我会使用 http.FileServer 来提供来自 node_modules 的 JS 文件 router := chi.
我是一名优秀的程序员,十分优秀!