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