go-zero微服务框架的静态文件服务

go-zero微服务框架的静态文件服务

应用场景

通过 go-zero 的 rest.WithFileServer("/public", http.Dir("./static/html")) 来给 restful 服务增加文件服务能力。即开放公开目录给外部访问。

go-zero版本

go-zero v1.7.0

新建项目目录

mkdir demo
cd demo

新建 demo.api 文件

demo.api

写入内容

syntax = "v1"

type Request {
	Name string `path:"name,options=you|me"`
}

type Response {
	Message string `json:"message"`
}

service demo-api {
	@handler DemoHandler
	get /from/:name (Request) returns (Response)
}

//goctl api go -api core.api -dir ./ -style go_zero

生成api代码

goctl api go -api core.api -dir ./ -style go_zero

新建静态1.html文件

demo/static/html/1.html

写入内容
hello 1.html

查看文件目录

.
├── demo.api
├── demo.go
├── etc
│   └── demo-api.yaml
├── go.mod
├── go.sum
├── internal
│   ├── config
│   │   └── config.go
│   ├── handler
│   │   ├── demo_handler.go
│   │   └── routes.go
│   ├── logic
│   │   └── demo_logic.go
│   ├── svc
│   │   └── service_context.go
│   └── types
│       └── types.go
└── static
    └── html
        └── 1.html

写入静态服务代码

修改demo.go

package main

import (
	"flag"
	"fmt"
	"net/http"

	"demo/internal/config"
	"demo/internal/handler"
	"demo/internal/svc"

	"github.com/zeromicro/go-zero/core/conf"
	"github.com/zeromicro/go-zero/rest"
)

var configFile = flag.String("f", "etc/demo-api.yaml", "the config file")

func main() {
	flag.Parse()

	var c config.Config
	conf.MustLoad(*configFile, &c)
	// 在 `./static/html` 目录下有需要对外提供的文件,比如有个文件 `1.html`,
	// 以 `http://127.0.0.1:8888/public/1.html` 这样的路径就可以访问该文件了。 
	//  public 在浏览器中访问的目录 映射到./static/html目录
	server := rest.MustNewServer(c.RestConf, rest.WithFileServer("/static", http.Dir("./static/html"))) #
	defer server.Stop()

	ctx := svc.NewServiceContext(c)
	handler.RegisterHandlers(server, ctx)

	fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
	server.Start()
}

启动api服务

go mod tidy
go run demo.go

访问1.html

curl -XGET http://127.0.0.1:8888/public/1.html
hello 1.html

image

参考文档

posted @ 2024-08-04 21:11  HaimaBlog  阅读(145)  评论(0编辑  收藏  举报