Джин служит [] байт как файл - PullRequest
1 голос
/ 25 мая 2020

У меня бэкэнд golang с джином. Он должен работать как прокси для ftp-сервера, который содержит аудиофайлы. Таким образом, мой клиент должен иметь возможность вызвать конечную точку / загрузку / путь к файлу, приложение Golang должно затем получить файл с ftp-сервера и вернуть его как файл (без потока).

Мое текущее решение - прочитать файл с ftp как байт [] и временно записать его на диск с помощью ioutil.TempFile () и вернуть этот файл с помощью ctx.File ().

Если возможно, я хотел бы пропустить шаг, на котором я создаю временный файл. Это возможно? Возможно, есть способ проксировать вызов и напрямую соединить http-вызов с ftp-вызовом?

Примечание. Я не контролирую клиентское приложение, поэтому не могу его изменить.

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Используйте Context.Data , чтобы написать []byte в качестве ответа.

Вы также можете использовать Context.DataFromReader для копирования непосредственно из ответа FTP на HTTP-ответ.

HTTP-ответы представляют собой поток байтов. Это невозможно обойти.

1 голос
/ 25 мая 2020

Вы можете писать в ResponseWriter, когда читаете файл. Это работает так же, как при использовании http.ResponseWriter.

import "io"

//...

io.Copy(ctx.ResponseWriter, ftpReader)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...