Nginx upload module (v 2.0.2)

рус анг

Модуль для веб-сервера nginx для процессинга аплоадов multipart/form-data (RFC 1867).

Описание

Модуль разбирает тело запроса и сохраняет все загружаемые файлы в каталог, заданный директивой upload_store. Загружаемые файлы вырезаются из тела запроса и измененный запрос после этого отправляется на location, задаваемый директивой upload_pass, позволяя обрабатывать загрузку файлов произвольным образом. Каждое файловое поле запроса может быть заменено на набор полей, задаваемый директивой upload_set_form_field. Содержимое каждого загруженного файла после этого может быть прочитано из файла, указываемого переменной $upload_tmp_path или файл может быть просто перемещен в итоговое место назначения. Временные файлы, создаваемые модулем, удаляются только в том случае, если при разборе части тела произошла ошибка, либо при ошибке записи на диск.

ВНИМАНИЕ: Модуль использует блокирующую запись, поэтому сервер должен использовать десятки или сотни воркеров в зависимости от нагрузки для предотвращения простоя соединений.

Параметры конфигурации


синтаксис: upload_pass <location>
значение по-умолчанию: нет
строгость: обязательная
контекст: server, location

Указывает location для передачи измененного тела запроса. Файловые поля вырезаются из тела запроса и заменяются полями, задаваемые директивой upload_set_form_field.


синтаксис: upload_store <каталог>
значение по-умолчанию: нет
строгость: обязательная
контекст: server, location

Указывает каталог в который будут записаны временные файлы.


синтаксис: upload_store_access <режим доступа>
значение по-умолчанию: user:rw
строгость: необязательная
контекст: server, location

Указывает режим доступа с которым будут созданы временные файлы.


синтаксис: upload_set_form_field <имя> <значение>
значение по-умолчанию: нет
строгость: необязательная
контекст: server, location

Задает поля формы, которые будут сгенерированы для каждого загружаемого файла в теле запроса, передаваемого бакэнду. Как имя так и значение могут содержать переменные nginx, а так же следующие специальные переменные:

Эти переменные доступны только во время обработки соответствующей части тела запроса и не могут быть, например, записаны в лог.

пример:
upload_set_form_field $upload_field_name.name "$upload_file_name";
upload_set_form_field $upload_field_name.content_type "$upload_content_type";
upload_set_form_field $upload_field_name.path "$upload_tmp_path";
		

синтаксис: upload_buffer_size <длина>
значение по-умолчанию: размер страницы памяти в байтах
строгость: необязательная
контекст: server, location

Размер буфера, который будет использован для записи данных на диск.


синтаксис: upload_max_part_header_len <длина>
значение по-умолчанию: 512
строгость: необязательная
контекст: server, location

Указывает максимальную длину заголовка части тела. Определяет размер буфера, который будет использован для аккумулирования этих заголовков.


Пример конфигурации

server {
    client_max_body_size 100m;
    listen       80;
    server_name  localhost;

    # Upload form should be submitted to this location
    location /upload {
        # Pass altered request body to this location
        upload_pass   /test;

        # Store files to this location
        upload_store /tmp;

        # Set specified fields in request body
        upload_set_form_field $upload_field_name.name "$upload_file_name";
        upload_set_form_field $upload_field_name.content_type "$upload_content_type";
        upload_set_form_field $upload_field_name.path "$upload_tmp_path";
    }

    # Pass altered request body to a proxy
    location /test {
        proxy_pass   http://localhost:8080;
    }
}
        

Пример формы для загрузки файлов

<html>
<head>
<title>Test upload</title>
</head>
<body>
<h2>Select files to upload</h2>
<form name="upload" method="POST" enctype="multipart/form-data" action="/upload">
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="file" name="file3"><br>
<input type="file" name="file4"><br>
<input type="file" name="file5"><br>
<input type="file" name="file6"><br>
<input type="submit" name="submit" value="Upload">
<input type="hidden" name="test" value="value">
</form>
</body>
</html>
        

Скачать

Версия 2.0.2: tar.gz zip MD5 SHA1
или перейти в каталог загрузки

Репозиторий

http://svn.myau.su/

Как использовать

Скачать исходники по ссылке выше.

tar xvzf nginx_upload_module-2.0.1.tar.gz

Сконфигурировать nginx с дополнительным модулем:

cd <путь к исходникам nginx>
./configure --add-module=<путь к исходникам модуля>
make
make install

Nginx

nginx -- это веб-сервер разработанный Игорем Сысоевым.

Лицензия

Описанный модуль является дополнением к веб-серверу nginx и является самостоятельным продуктом. Лицензия описанного модуля BSD Вы должны были получить копию лицензии вместе с исходными кодами модуля.

Связаться с автором

Valery Kholodkov valery+nginx@grid.net.ru
Пожалуйста, используйте расширение адреса при составлении письма мне.


Copyright (C) 2006, 2008 Valery Kholodkov
Отметки о копирайте модуля см. в исходных кодах модуля.