Golang возвращает файл из fly

#go #ini #go-echo

#Вперед #ini #go-echo

Вопрос:

У меня есть ECHO framework, который должен возвращать файл по запросу, и он работает хорошо

 func IniExport(c echo.Context) error{
    cfg := ini.Empty()
    if section, err := cfg.NewSection("test_section"); err != nil {
        return c.JSON(http.StatusInternalServerError, "Problems with generation of export file.")
    }
    if key, err := cfg.Section("test_section").NewKey("name", "value"); err != nil {
        return c.JSON(http.StatusInternalServerError, "Problems with generation of export file.")
    }
    cfg.SaveTo("export.ini")
    defer os.Remove("export.ini")
    return c.Attachment("export.ini", "export.ini")
}
  

Но вопрос, возможно ли не создавать физический файл export.ini и после не удалять его? Возможно ли как-то вернуть содержимое на лету?
Спасибо

Комментарии:

1. Да, конечно, если ваш cfg может записывать себя в io. Писатель. Поскольку вы не объяснили, что ini такое, мы не можем вам помочь.

2. Ini прост «gopkg.in/ini.v1 » библиотека

3. Так что просто используйте godoc.org/gopkg.in/ini.v1#File . writeTo . Всегда читайте полный документ пакета.

Ответ №1:

Я думаю, вам нужно отправить большой двоичный объект.

Отправить большой двоичный объект Context#Blob(code int, ContentType string, b []байт) может использоваться для отправки произвольного ответа данных с предоставленным типом содержимого и кодом состояния.

Пример

 func(c echo.Context) (err error) {
  data := []byte(`0306703,0035866,NO_ACTION,06/19/2006
      0086003,"0005866",UPDATED,06/19/2006`)
    return c.Blob(http.StatusOK, "text/csv", data)
}
  

Вы можете использовать функцию writeTo, чтобы сначала записать cfg содержимое в io.Writer , а затем это содержимое можно использовать вместо data (в предыдущем примере кода. Также не забудьте изменить тип содержимого на text/plain )