Идет загрузка огромного файла и передача клиенту (проксирование)
У меня небольшое приложение на основе Martini, и я столкнулся с проблемой, которую не могу решить.
Я хочу добавить функцию приложения, которая позволит пользователю получать файлы с 3-го сервера с некоторыми изменениями в заголовках HTTP. Какой-то прокси. Файлы довольно большие (200+ Мб каждый), и я хочу, чтобы эти файлы передавались клиенту. Под "потоком" я подразумеваю, что данные файла должны начать возвращаться клиенту сразу после того, как приложение получило первые байты, не сохраняя весь файл на диске и / или в памяти.
Это возможно с Мартини и Го?
1 ответ
Да, это вообще возможно с Go, я не очень знаком с Мартини. Ответ http от вызова удаленного файла возвращает Reader
интерфейс, и ваш обработчик запросов имеет Writer
интерфейс. Это означает, что вы можете читать поток данных и записывать поток данных. Возьмите на себя ответственность только за манипулирование тем, что вы хотите, и "исправьте" перенаправленный поток в поток запросов.
Иди даже есть ReverseProxy
Утилита, встроенная в стандартную библиотеку:
http://golang.org/pkg/net/http/httputil/
Вы можете смешать Martini и стандартную библиотеку http, если хотите.
[EDIT] Читая документы martini, вы можете добавить необработанные обработчики http, как в стандартной библиотеке, то есть вы действительно можете это сделать: https://github.com/codegangsta/martini