-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Attachments in v5 returning 404 and type application/json #2929
Copy link
Copy link
Closed
Description
This code works in v4, but when run in v5, the browser says ERR_INVALID_RESPONSE
package main
import (
"encoding/csv"
"errors"
"log"
"net/http"
"os"
"strconv"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
type Item struct {
Name string
Price float64
Cost float64
}
func main() {
e := echo.New()
e.Use(middleware.RequestLogger())
e.Use(middleware.Gzip())
e.GET("/data.csv", func(c echo.Context) error {
items := []Item{
Item{
Name: "Item 1",
Price: 10.99,
Cost: 4.63,
},
Item{
Name: "Item 2",
Price: 20.99,
Cost: 12.82,
},
}
f, err := os.CreateTemp("/tmp/", "data-*.csv")
if err != nil {
e.Logger.Error("Could not create data temp file", err)
return c.HTML(500, "Could not create data temp file")
}
defer f.Close()
ic := csv.NewWriter(f)
ic.Write([]string{
"Name",
"Price",
"Cost"})
for _, item := range items {
row := []string{
item.Name,
strconv.FormatFloat(item.Price, 'f', 2, 64),
strconv.FormatFloat(item.Cost, 'f', 3, 64)}
ic.Write(row)
}
ic.Flush()
return c.Attachment(f.Name(), "data.csv")
})
if err := e.Start(":8080"); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatal(err)
}
}
v5:
package main
import (
"encoding/csv"
"errors"
"log"
"net/http"
"os"
"strconv"
"github.com/labstack/echo/v5"
"github.com/labstack/echo/v5/middleware"
)
type Item struct {
Name string
Price float64
Cost float64
}
func main() {
e := echo.New()
e.Use(middleware.RequestLogger())
e.Use(middleware.Gzip())
e.GET("/data.csv", func(c *echo.Context) error {
items := []Item{
Item{
Name: "Item 1",
Price: 10.99,
Cost: 4.63,
},
Item{
Name: "Item 2",
Price: 20.99,
Cost: 12.82,
},
}
f, err := os.CreateTemp("/tmp/", "data-*.csv")
if err != nil {
e.Logger.Error("Could not create data temp file", err)
return c.HTML(500, "Could not create data temp file")
}
defer f.Close()
ic := csv.NewWriter(f)
ic.Write([]string{
"Name",
"Price",
"Cost"})
for _, item := range items {
row := []string{
item.Name,
strconv.FormatFloat(item.Price, 'f', 2, 64),
strconv.FormatFloat(item.Cost, 'f', 3, 64)}
ic.Write(row)
}
ic.Flush()
return c.Attachment(f.Name(), "data.csv")
})
if err := e.Start(":8080"); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatal(err)
}
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels