Один маленький вопросик по виртуальной флэшке

TRust
Дата: 04.03.2007 21:18:50
Добрый день!
Реализую при помощи mod_plsql Oracle HTTP Server хранилище файлов многих пользователей, где каждому юзеру отведено небольшое файловое пространство и все пользователи ходят к ораклу через один DAD.
Всё бы ничего, но UPLOAD файлов производится по фиксированному алгоритму:
1. Пересылка файла на сервер
2. Запись файла в указанной (в DAD) таблице под его же собственным именем
3. Передача управления процедуре генерации следующей WEB-странице

Здесь есть один изъян - а если 2 юзверя одновременнл попытаются загрузить на сервер файлы с совпадающими именами? Понятно, что на этапе 3 можно переименовать только что загруженный файл, но при огромном количестве пользователей коллизии на этапе 2 возможны и лучшее что здесь можно сделать - повесить уникальный ключ на имя файла.
Однако пользователям начхать на технологические трудности и возникнет недоумение, когда кому-то откажут в записи файла неизвестно на каком основании!

Вопрос: Может быть кто решал подобную проблему и успешно решил её - поделитесь опытом!
TRust
Дата: 05.03.2007 10:14:12
Up?
Хм...
Дата: 05.03.2007 13:16:19
Не понятно по каким причинам должны кому-то отказать. Если в таблице нет проверки на уникальность значения в поле с именем файла, то пиши туда ради Бога сколько угодно одинаковых имен. Либо сделай поле с уникальным значением по которому твои пользователи будут распознавать свои файлы.

Вопрос не совсем понятен.
TRust
Дата: 05.03.2007 15:55:23
Хм...
Вопрос не совсем понятен.

Поясняю:

Если не делать ограничения на уникальность имён, то при одновременной загрузке разных файлов разными пользователями но под одним именем - они загрузятся, но как потом процедура генерации следующей страницы поймёт - какой файл чей?

Пользователи ходят через один DAD.
В DAD указана таблица, куда грузить (upload) файлы.
При процедуре upload невозможно указать какой-либо атрибут пользователя - сохраняются только атрибуты файла.

Сразу за загрузкой работает процедура генерации следующей страницы - она уже работает в контексте пользователя - можно проверить права, переименовать, переместить или удалить только что загруженный файл. Но связь с файлом только по имени! А их загружено уже не один под таким именем!!!

Если же повесить уникальность на имя то такой ситуации, конечно, не возникнет, но один из пользователй получит отлуп. А на каком основании - он знать не знает о файловых пространствах других пользователей (много файловых пространств, таблица одна - указанная в DAD) и ему вообще начхать на других пользователей!

Допускаю, что есть более продвинутые средства достичь желаемого (загрузить файл с другими атрибутами <FORM> ... </form>). Вот и спрашиваю - как! Неужели никто не делал?
maksi_m
Дата: 06.03.2007 07:49:40
если я правильно понял задачу, т о хорошим тоном (и как правило стандартными средствами) на этапе 1, файлу дается temp_name ;)
TRust
Дата: 06.03.2007 22:09:05
maksi_m
если я правильно понял задачу, т о хорошим тоном (и как правило стандартными средствами) на этапе 1, файлу дается temp_name ;)

Ха! Если бы я этим мог управлять...
Согласно документации для загрузки файла необходимо
<FORM...>
<INPUT type="file" name="ParamName">
...
</form>

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