使用Echo提供文件

时间:2017-08-08 03:23:18

标签: go echo-framework

我尝试使用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?");
}

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

在Chrome中:

  

SyntaxError:无法执行' setRequestHeader' on' XMLHttpRequest':' Bearer {the_entire_content_of_the_first_fetched_file}'不是有效的HTTP标头字段值。

在Firefox中:

  

SyntaxError:指定了无效或非法字符串

在Edge中,只需:

  

的SyntaxError

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

看起来与Postman相处得很好。也许这是我在应用程序中获取数据的问题?

如果您需要更多信息,这个帖子与我之前的帖子(Vuejs with axios request in vuex store: can't make more than one request, why?)直接相关,但我不想混淆它们,因为我不知道但如果我在我的Vue代码或我的Echo代码中弄错了......

3 个答案:

答案 0 :(得分:0)

如果您想从某个目录传送文件。您可以采取以下方式:

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

OR

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

答案 1 :(得分:0)

只需添加默认的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},
}))

答案 2 :(得分:0)

Welp,似乎一直是我的应用程序的错!我的Echo api似乎很好......现在!

如果有人遇到同样的问题,也许这个Vuejs with axios request in vuex store: can't make more than one request, why?会有所帮助。