Nginx upload module (v 2.1.1) |
рус анг |
Модуль для веб-сервера nginx для процессинга аплоадов multipart/form-data (RFC 1867).
Модуль разбирает тело запроса и сохраняет все загружаемые файлы в каталог, заданный директивой upload_store. Загружаемые файлы вырезаются из тела запроса и измененный запрос после этого отправляется на location, задаваемый директивой upload_pass, позволяя обрабатывать загрузку файлов произвольным образом. Каждое файловое поле запроса может быть заменено на набор полей, задаваемый директивой upload_set_form_field. Содержимое каждого загруженного файла после этого может быть прочитано из файла, на который указывает переменная $upload_tmp_path или файл может быть просто перемещен в итоговое место назначения. Удаление загруженных файлов при возникновении ошибок контролируется директивой upload_cleanup.
Указывает location, которому будет передано измененное тело запроса.
Указывает каталог в который будут записаны загружаемые файлы. Каталог может быть хэшированный. В этом случае все подкаталоги должны быть созданы перед запуском nginx.
Указывает режим доступа с которым будут созданы временные файлы.
Задает поля формы, которые будут сгенерированы для каждого загружаемого файла в теле запроса, передаваемого бакэнду. Как имя так и значение могут содержать переменные 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_set_form_field ${upload_field_name}${upload_archive_elm}.name "$upload_file_name"; upload_set_form_field ${upload_field_name}${upload_archive_elm}.content_type "$upload_content_type"; upload_set_form_field ${upload_field_name}${upload_archive_elm}.path "$upload_tmp_path"; upload_set_form_field ${upload_field_name}${upload_archive_elm}.archive_path "$upload_archive_path";
Задает поля формы, содержащие агрегированные атрибуты файлы. Поля будут сгенерированы для каждого загружаемого файла в теле запроса, передаваемого бакэнду. Как имя так и значение могут содержать переменные nginx, переменные директивы upload_set_form_field, а так же следующие дополнительные переменные:
ВНИМАНИЕ: переменные $upload_file_md5, $upload_file_md5_uc, $upload_file_sha1 и $upload_file_sha1_uc требуют дополнительного процессорного времени для вычисления MD5 и SHA1 сумм.
пример:upload_aggregate_form_field $upload_field_name.md5 "$upload_file_md5"; upload_aggregate_form_field $upload_field_name.size "$upload_file_size";
Задает регулярное выражение для имен полей, которые будут пропущены от клиента к бакэнду. Эта директива может повторяться произвольное число раз для одного location'а. Поле будет передано бакэнду если его имя совпадет с любым мз регулярных выражений. Для сред где недоступен PCRE эта директива задает точное имя поля для передачи бакэнду. Если директива опущена, то ни одно поле не будет передано бакэнду из оригинального запроса.
пример:upload_pass_form_field "^submit$|^description$";
Для сред, где недоступен PCRE:
upload_pass_form_field "submit"; upload_pass_form_field "description";
Указывает HTTP-статусы, после получения которых все файлы, успешно загруженные в текущем запросе, будут удалены. Бакэнд может явно сигнализировать ошибочный статус чтобы удалить файлы, если они по какой-то причине оказались ему не нужны. Статус должен задаваться числом в промежутке от 400 до 599, лидирующие нули запрещены. При указании промежутка статусы разделяются символом - (минус).
пример:upload_cleanup 400 404 499 500-505;
Размер буфера, который будет использован для записи данных на диск.
Указывает размер буфера, который будет использован для аккумулирования этих заголовков. Таким образом, определяет максимальную длину заголовка части тела.
Указывает максимальный размер загружаемого файла. Все файлы длинее указанного размера пропускаются. Эта директива задает "мякгое" ограничение, в том смысле, что при обнаружении файла длинее указанного размера, nginx не остановит обработку запроса, а попытается принять файлы из оставшихся его частей. Для "жесткого" ограничения должна применяться директива client_max_body_size. Значение 0 для директивы upload_max_file_size означает, что размер файла не нужно ограничивать.
Указывает максимальный размер тела результативного запроса. Предотвращает переполнение памяти нефайловыми полями запроса. Если тело результативного запроса превышает указанное ограничение, то выдается ошибка 413 (Request entity too long). Значение 0 для директивы upload_max_output_body_len означает, что размер тела результативного запроса не нужно ограничивать.
Разрешает передачу аргументов исходного запроса бакэнду. Пример:
<form action="/upload?id=5"> ... location /upload { upload_pass /internal_upload; upload_pass_args on; } ... location /internal_upload { ... proxy_pass http://backend; }
В этом примере бакэнд получает URI запроса "/upload?id=5". В случае upload_pass_args off бакэнд получит "/upload".
Задает список mime-типов, которые, будучи полученными от клиента, считаются неопределенными, и для которых mime-тип будет определен по расширению файла, путем поиска в таблце, задаваемой директивой types {}.
пример:upload_void_content_type application/octet-stream; upload_void_content_type application/oct-stream;
Задает строку, которая будет использоваться как разделитель в именах элементов архива. Используется для генерации уникальных имен полей формы.
Задает строку, которая будет использоваться как разделитель путей архива.
Описывает фильтр для файлов указанных mime-типов. Фильтры активизируются директивами соответствующих модулей. Встроенные фильтры активизируются директивами upload_unzip и upload_discard (см. ниже). Пример:
location /upload { upload_pass /a; upload_store /tmp/path_a; # extract files from zip archives and store to specified directory upload_filter application/zip { upload_unzip; upload_store /tmp/path_to_archives; } # discard all jpeg images upload_filter image/jpeg image/png { upload_discard; } }
Активизирует фильтр, отбрасывающий содержимое загружаемого файла.
Активизирует фильтр, выполняющий разархивирование загружаемого файла в формате PKZIP. Фильтр обрабатывает архив по мере поступления данных от клиента, сохраняет содержащиеся в архиве файлы и генерирует соответствующие поля формы, как если бы содержащиеся в архиве файлы были частью исходного запроса. Для генерации уникальных имен полей формы используется переменная ${upload_archive_elm}, содержащая строки вида _1, _2, _3 и т.д., либо пустую строку, если файл не является элементом архива. Путь к файлу внутри архива определяется переменной ${upload_archive_path}. mime-тип файлов, полученных из архива, определяется по расширению путем поиска в таблице, задаваемой директивой types {}.
Задает число и размер буферов, используемых для декомпрессии загружаемых файлов.
Указывает максимальную длину имени файла ZIP-архива.
server { client_max_body_size 100m; listen 80; # 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}${upload_archive_elm}.name "$upload_file_name"; upload_set_form_field ${upload_field_name}${upload_archive_elm}.content_type "$upload_content_type"; upload_set_form_field ${upload_field_name}${upload_archive_elm}.path "$upload_tmp_path"; upload_set_form_field ${upload_field_name}${upload_archive_elm}.archive_path "$upload_archive_path"; # Inform backend about hash and size of a file upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5"; upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size"; # Pass matching fields from client to backend upload_pass_form_field "^submit$|^description$"; upload_cleanup 400 404 499 500-505; } # Pass altered request body to a backend location /test { # # This location should be declared internal in order to prevent # posting of faked fields to it # internal; 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.1.1: tar.gz zip MD5 SHA1
Версия 2.0.6: tar.gz zip MD5 SHA1
Версия 2.0.5: tar.gz zip MD5 SHA1
Версия 2.0.4: tar.gz zip MD5 SHA1
Версия 2.0.3: tar.gz zip MD5 SHA1
Версия 2.0.2: tar.gz zip MD5 SHA1
или перейти в каталог загрузки
Версия 2.0.6
Версия 2.0.5
Версия 2.0.4
Версия 2.0.3
Версия 2.0.2
Скачать исходники по ссылке выше.
tar xvzf nginx_upload_module-2.1.1.tar.gz
Сконфигурировать nginx с дополнительным модулем:
cd <путь к исходникам nginx> ./configure --add-module=<путь к исходникам модуля> make make install
nginx -- это веб-сервер разработанный Игорем Сысоевым.
Описанный модуль является дополнением к веб-серверу nginx и является самостоятельным продуктом. Лицензия описанного модуля BSD Вы должны были получить копию лицензии вместе с исходными кодами модуля.
Valery Kholodkov valery+nginx@grid.net.ru
Пожалуйста, используйте расширение адреса при составлении письма мне.
Если Вам понравился модуль, то Вы можете проспонсировать его разработку и поддержку или мою работу над модулями для nginx вцелом.
PayPal
Copyright (C) 2006, 2008 Valery Kholodkov
Отметки о копирайте модуля см. в исходных кодах модуля.