Обслуживание Больших Файлов Через Nginx через направляющие 2.3 Используя x-sendfile

Определите свою собственную строку формата разбора для использования.

string formatString = "yyyyMMddHHmmss";
string sample = "20100611221912";
DateTime dt = DateTime.ParseExact(sample,formatString,null);

Если у вас есть дата и время в миллисекундах, используйте следующий формат String

string format = "yyyyMMddHHmmssfff"
string dateTime = "20140123205803252";
DateTime.ParseExact(dateTime ,format,CultureInfo.InvariantCulture);

Спасибо

11
задан Rich Apodaca 5 June 2009 в 06:14
поделиться

1 ответ

Основная идея: все, что делает ваш контроллер, - это настраивает nginx Заголовок x-Accel-Redirect . Как только ваш метод контроллера вернется (что будет очень быстро), nginx просмотрит заголовок, установленный вашим приложением Rails. Если установлено x-Accel-Redirect, то nginx обслуживает статический файл.

Ваш контроллер будет выглядеть примерно так:

def show  
  @attachment = Attachment.find(params[:id])  
  # Do anything else you need for authentication, etc. 

  head(:x_accel_redirect => '/files/' + @attachment.filename,  
   :content_type => @attachment.content_type,  
   :content_disposition => "attachment; filename=\"#{@attachment.filename}\"")  
end  

Одно это не поможет. Вам также необходимо сообщить nginx о файлах, расположенных в $ RAILS_ROOT / files. Добавьте это в конец вашей конфигурации nginx внутри блока сервера:

location /files {
  root /path/to/rails_app;  
  internal;  
}

Поместите статический файл в $ RAILS_ROOT / files, и он должен работать. Не нужны плагины или патч-обезьяна. Протестировано с Rails 2.3.2 и 2.3.14.

24
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: