Re: Вопрос по client body in file only в контексте file upload

Maxim Dounin mdounin at mdounin.ru
Sun Oct 13 23:07:23 UTC 2013


Hello!

On Sun, Oct 13, 2013 at 05:36:51PM -0400, naive wrote:

> Доброй ночи!
> 
> Возник вопрос по использованию client_body_in_file_only для обработки file
> upload.
> 
> Есть подробный how-to, раскрывающий данную тему:
> https://coderwall.com/p/swgfvw
> 
> Однако, возникает вопрос - что произойдёт, если при записи файла в
> client_body_temp_path файл с подобным именем будет уже существовать?
> Такая ситуация, как мне кажется, может произойти в случаях:
> 1. количество файлов станет >= 10^10
> 2. файлы будут восстановлены из бекапа, при этом id будет высчитываться
> "по-порядку"
> 3. случайно сгенерированный id совпадёт с именем уже существующего файла
> 
> Возможные варианты:
> 1. ошибка
> 2. перезапись файла
> 3. генерация нового id, при наличии ранее созданного файла с таким же именем
> (если кол-во файлов <10^10)

Если при создании временного файла nginx натыкается на уже 
существующий файл, то он пробует ещё раз, выбрав другое имя файла.  
Подробнее можно почитать в src/core/ngx_files.c, в функции 
ngx_create_temp_file().

> Вопрос, на который я хочу ответить - можно ли хранить uploaded files прямо в
> client_body_temp_path или же необходим CLI-скрипт, перемещающий файлы в
> другую директорию с гарантированно уникальным id или проверкой
> уникальности?

Каталог для хранения временных файлов не предназначен для того, 
чтобы в нём держали файлы дольше, чем это необходимо для обработки 
этих файлов.  Фатальных проблем при коллизиях не возникнет, см. 
выше, но и хорошего тоже немного.

> И смежный подвопрос - когда появится возможность влиять на
> client_body_temp_path и имена файлов, которые генерятся при записи
> (насколько я понимаю, сейчас они имеют вид [\d]{10})?

Возможность влиять на имена файлов есть и сейчас, она подробно 
документирована тут:

http://nginx.org/r/client_body_temp_path

А именно - можно задавать желаемую иерархию подкаталогов.  Более 
никаких возможностей для влияния не планируется.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



Подробная информация о списке рассылки nginx-ru