Проверка вуществования файла при загрузке на сервер
Подскажите, пожалуйста, ответ на такой вопрос: Пользователь загружает на сервер довольно большие файлы (до 50МБ). Можно ли проверить существование файла с таким именем на сервере до загрузки файла, т.е. чтобы пользователю не пришлось ждать, пока эти 50 МБ загрузятся на сервер, а сразу получить сообщение о существовании файла, либо, если такого файла нет, продолжить загрузку?
Подскажите, пожалуйста, ответ на такой вопрос: Пользователь загружает на сервер довольно большие файлы (до 50МБ). Можно ли проверить существование файла с таким именем на сервере до загрузки файла, т.е. чтобы пользователю не пришлось ждать, пока эти 50 МБ загрузятся на сервер, а сразу получить сообщение о существовании файла, либо, если такого файла нет, продолжить загрузку?
Ajax проверка
[COLOR="Silver"]ЗЫ: давно вас на форуме не было видно)[/COLOR]
Вот и я тоже так подумал. Только вот из опыта уже могу сказать, что шанс найти у двух пользователей файл с одинаковыми названиям очееень низкий. Даже если этот файл у них идеинтичный. Я и сам часто переименовываю файлы после загрузки так, как это мне удобно, а не как предлагается по дефолту. И именно поэтому и я сомневаюсь в реальной целесообразности такой провеки.
[COLOR="Silver"]ЗЫ: давно вас на форуме не было видно)[/COLOR]
[COLOR="Silver"]З.Ы.: Неохота было, да и работы полно. Было. А сейчас чего-то вылез по поводу Erlang-а и решил уж немного по темам попродить. Наверное старость и ностальгия :D[/COLOR]
Я файлы тоже переименовываю после загрузки, но если пользователь загрузит уже существующий файл, то загрузка произойдет, файл переименуется и будет занимать место, дублируя первый. А при просмотре списка загруженных файлов пользователь увидит два одинаковых имени, т.к. ему доступны только оригинальные имена. Только я так и не поняла: смысла в дозагрузочной проверке нет?
Что означает неатомарна? И почему примитивна? Простос AJAX я ни разу не работала.
Вот читал эту тему и малость заинтересовался ею.
Хотелось бы задать вопрос знатокам, а возможно ли осуществить этот поиск с помощью хэша файла (MD5)?
Насколько я помню в пхп есть такая функция [COLOR="Blue"]md5_file[/COLOR], которая возвращает MD5 хэш файла.
Вычитывать хэш загружаемого файла (если это возможно :)) и сравнивать его с существующими.
А на сервере создать базу, в которой будут хранится хэши всех существующих файлов.
Возможно. Только чтобы посчитать в PHP MD5 файла, его придется сначала загрузить на сервер. Полностью
Если ты пытаешься определить если ли такой файл на сервере (для исключения дублирования), то, имхо, нет.
1) Файлы имеющие одинаковые имена не всегда являются на самом деле одним и тем же файлом.
Я довольно часто загружаю на сервер файлы в духе 1.jpg, 2.jpg... из программ пакетной обработки файлов (делаю конвертирование из RAW-ов). При этом это совершенно не те 1.jpg, 2.jpg... файлы которые лежат не сервере.
2) Файлы имеющие разные имена не всегда являются разными файлами. Это может быть один и тот же файл.
У пользователя Васи может быть видео ролик "прикол.flv", а у пользователя Пети этот же файл, но названыый "прикол с Васей.flv". Имена разные, но это идеинтичные файлы.
Поэтому в данном контексте лично я считаю более правильно сверять не только оригинальные имена файлов на наличие их на сервере, но еще так же сверять хэши файлов (там по MD5, CRC или CHAP алгоритмам). Так что я думаю вывод напрашивается сам, дозагрузочная проверка может быть излишней. Дозагрузочная проверка была бы возможна, но не в случае загрузки через браузер, т.к. JS работа в браузерной песочнице не имеет доступа к файловой системе.
Я приблезительно так и предполагал, вот только не знал возможно ли каким-то образом передать MD5 файла до загрузки его на сервер - оказывается что нельзя.
to arnabius: В таком случае, здесь наверное уже лучше делать послезагрузочную проверку, и вслучае дублицирования удалять один из файлов, а пользователю выдавать сообщение, что точно такой же файл уже существует (пусть даже он и с другим именем). Но это все, конечно же, имеет смысл если вы делаете это ради экономии места на сервере, а если ради эстетичности, то, имхо, нету смысла - посмотрите на Ютуб.