Эрланг скачать файл азота
Мне нужно обеспечить функцию загрузки файла в моем приложении азота.
В принципе мне нужно установить заголовки так:
wf:header("Content-Disposition", "attachment; filename=\"" ++ Filename ++ "\""),
но сейчас я не могу найти функцию в Nitrogen API для отправки блоков данных моего файла.
Мне нужно загружать файл порциями, потому что они могут быть очень большими, кроме того, файлы не доступны в локальном хранилище, но двоичные данные получены из других модулей. Поэтому на практике мне нужно самостоятельно обрабатывать отправку блоков данных в поток http.
Любая идея или пример, как это сделать, какую функцию API можно использовать?
1 ответ
Лучший ответ, который я могу вам дать, это тот, на который я ответил несколько дней назад в списке рассылки Nitrogen:
Существует не лучший способ справиться с этим. Есть два способа справиться с этим:
1) Использование потоковых механизмов нижележащего сервера (например, создание таблицы диспетчеризации для ковбоя, предназначенной для модуля-обработчика ковбоя, который имеет дело с потоковой передачей) или выходной файл.
2) Используя ковбоя, есть немного хака, который может работать в simple_bridge, если вы используете ковбоя. Если ваш модуль main()
функция возвращает кортеж: {stream, StreamFun}
где StreamFun - это функция с arity 2, которая (fun(Socket, Transport)
- транспорт ранчо). На самом деле, это просто ярлык, который позволяет вам использовать Transport: send (socket) для отправки данных. Я признаю, что я не делал этого раньше, но это должно работать с небольшим изменением.
Добавление этого фактического параметра в simple_bridge и Nitrogen, вероятно, будет целесообразным.