使用 Echo 服务文件

Serving files with Echo

我正在尝试使用 Echo 提供多个文件,但并非每次都有效。 api 代码如下所示:

package main

import (
    "github.com/labstack/echo"

    "net/http"
)

func main() {
    e := echo.New();

    e.GET("/", home);

    e.File("/data1", "assets/data1.csv");

    e.File("/data2", "assets/data2.csv");

    e.Logger.Fatal(e.Start(":4243"));
}

func home(c echo.Context) error {
  return c.String(http.StatusOK, "Are you lost?");
}

准确地说,它确实适用于第一次文件提取,但随后的任何后续调用(无论是文件提取还是更多 "classic" 调用)都会失败。每个浏览器的错误消息略有不同:

在Chrome中:

SyntaxError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'Bearer {the_entire_content_of_the_first_fetched_file}' is not a valid HTTP header field value.

在 Firefox 中:

SyntaxError: An invalid or illegal string was specified

在 Edge 中,只需:

SyntaxError

尝试激活 CORS,没有任何改变。

看起来与 Postman 配合得很好。可能是我在应用程序中获取数据的方式有问题?

如果您可能需要更多信息,此主题与我之前的主题 () 直接相关,但我不想将它们混淆,因为我还不知道是否我在 Vue 代码或 Echo 代码中弄错了...

如果您想从某个目录传送文件。您可以通过以下方式进行:

e.Use(middleware.Static("/path/to/directory"))

fs := http.FileServer(http.Dir("/path/to/directory"))
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets/", fs)))

只需添加默认的 CORS 中间件,我只是测试了一下,即使我使用不同的域,它也能正常工作。 从 echo 框架导入这个包:"github.com/labstack/echo/middleware" 并在您的路线之前添加此默认 CORS 配置:

e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
    AllowOrigins: []string{"*"},
    AllowMethods: []string{echo.GET, echo.PUT, echo.POST, echo.DELETE},
}))

哎呀,看来这一直是我的应用程序的错!我的 Echo api 似乎还不错……暂时!

如果有人遇到同样的问题,也许这个 会有所帮助。