Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка вуществования файла при загрузке на сервер

6.5K
13 апреля 2009 года
arnabius
15 / / 07.10.2004
Доброго времени суток!
Подскажите, пожалуйста, ответ на такой вопрос: Пользователь загружает на сервер довольно большие файлы (до 50МБ). Можно ли проверить существование файла с таким именем на сервере до загрузки файла, т.е. чтобы пользователю не пришлось ждать, пока эти 50 МБ загрузятся на сервер, а сразу получить сообщение о существовании файла, либо, если такого файла нет, продолжить загрузку?
304
13 апреля 2009 года
Fenyx
707 / / 26.01.2005
Цитата: arnabius
Доброго времени суток!
Подскажите, пожалуйста, ответ на такой вопрос: Пользователь загружает на сервер довольно большие файлы (до 50МБ). Можно ли проверить существование файла с таким именем на сервере до загрузки файла, т.е. чтобы пользователю не пришлось ждать, пока эти 50 МБ загрузятся на сервер, а сразу получить сообщение о существовании файла, либо, если такого файла нет, продолжить загрузку?


Ajax проверка

6.5K
13 апреля 2009 года
arnabius
15 / / 07.10.2004
Спасибо, попробую.
353
14 апреля 2009 года
Nixus
840 / / 04.01.2007
AJAX проверка слишком примитивна и сильно неатомарна.
12
15 апреля 2009 года
alekciy
3.0K / / 13.12.2005
Крайне сомнительная задача. Файл при upload все равно загружается во временную папку с временным именем (уникальном для данной директории в текущий момент времени). Если вы тупо боитесь коллизии (а других адекватных вариантов я не вижу) и перезаписывания старого файла новым, то можно просто в имя нового файла добавить какой то суффикс подобно том, как это делает винда когда в одну папку через Ctrl+V вставляется один и тот же файл.
244
15 апреля 2009 года
UAS
2.0K / / 19.07.2006
alekciy, да не, тут наверно не нужно уникальное имя (исходя из задачи). Т.е. все файлы со своими родными именами и одинаковости не предполагается (по имени). Тогда затея автора ясна, так как мне, допустим, тоже неохото ждать залития 50метров и потом выяснить, что такое есть.

[COLOR="Silver"]ЗЫ: давно вас на форуме не было видно)[/COLOR]
12
15 апреля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: UAS
alekciy, да не, тут наверно не нужно уникальное имя (исходя из задачи). Т.е. все файлы со своими родными именами и одинаковости не предполагается (по имени). Тогда затея автора ясна, так как мне, допустим, тоже неохото ждать залития 50метров и потом выяснить, что такое есть.


Вот и я тоже так подумал. Только вот из опыта уже могу сказать, что шанс найти у двух пользователей файл с одинаковыми названиям очееень низкий. Даже если этот файл у них идеинтичный. Я и сам часто переименовываю файлы после загрузки так, как это мне удобно, а не как предлагается по дефолту. И именно поэтому и я сомневаюсь в реальной целесообразности такой провеки.

Цитата: UAS

[COLOR="Silver"]ЗЫ: давно вас на форуме не было видно)[/COLOR]


[COLOR="Silver"]З.Ы.: Неохота было, да и работы полно. Было. А сейчас чего-то вылез по поводу Erlang-а и решил уж немного по темам попродить. Наверное старость и ностальгия :D[/COLOR]

6.5K
16 апреля 2009 года
arnabius
15 / / 07.10.2004
Цитата: alekciy
Вот и я тоже так подумал. Только вот из опыта уже могу сказать, что шанс найти у двух пользователей файл с одинаковыми названиям очееень низкий. Даже если этот файл у них идеинтичный. Я и сам часто переименовываю файлы после загрузки так, как это мне удобно, а не как предлагается по дефолту. И именно поэтому и я сомневаюсь в реальной целесообразности такой провеки.



Я файлы тоже переименовываю после загрузки, но если пользователь загрузит уже существующий файл, то загрузка произойдет, файл переименуется и будет занимать место, дублируя первый. А при просмотре списка загруженных файлов пользователь увидит два одинаковых имени, т.к. ему доступны только оригинальные имена. Только я так и не поняла: смысла в дозагрузочной проверке нет?

Цитата: Nixus
AJAX проверка слишком примитивна и сильно неатомарна.


Что означает неатомарна? И почему примитивна? Простос AJAX я ни разу не работала.

22K
16 апреля 2009 года
kotelius
75 / / 08.08.2008
Всем привет!

Вот читал эту тему и малость заинтересовался ею.
Хотелось бы задать вопрос знатокам, а возможно ли осуществить этот поиск с помощью хэша файла (MD5)?
Насколько я помню в пхп есть такая функция [COLOR="Blue"]md5_file[/COLOR], которая возвращает MD5 хэш файла.
Вычитывать хэш загружаемого файла (если это возможно :)) и сравнивать его с существующими.
А на сервере создать базу, в которой будут хранится хэши всех существующих файлов.
14
16 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: kotelius
а возможно ли осуществить этот поиск с помощью хэша файла (MD5)?


Возможно. Только чтобы посчитать в PHP MD5 файла, его придется сначала загрузить на сервер. Полностью

12
16 апреля 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: arnabius
Я файлы тоже переименовываю после загрузки, но если пользователь загрузит уже существующий файл, то загрузка произойдет, файл переименуется и будет занимать место, дублируя первый. А при просмотре списка загруженных файлов пользователь увидит два одинаковых имени, т.к. ему доступны только оригинальные имена. Только я так и не поняла: смысла в дозагрузочной проверке нет?


Если ты пытаешься определить если ли такой файл на сервере (для исключения дублирования), то, имхо, нет.

1) Файлы имеющие одинаковые имена не всегда являются на самом деле одним и тем же файлом.

Я довольно часто загружаю на сервер файлы в духе 1.jpg, 2.jpg... из программ пакетной обработки файлов (делаю конвертирование из RAW-ов). При этом это совершенно не те 1.jpg, 2.jpg... файлы которые лежат не сервере.

2) Файлы имеющие разные имена не всегда являются разными файлами. Это может быть один и тот же файл.

У пользователя Васи может быть видео ролик "прикол.flv", а у пользователя Пети этот же файл, но названыый "прикол с Васей.flv". Имена разные, но это идеинтичные файлы.


Поэтому в данном контексте лично я считаю более правильно сверять не только оригинальные имена файлов на наличие их на сервере, но еще так же сверять хэши файлов (там по MD5, CRC или CHAP алгоритмам). Так что я думаю вывод напрашивается сам, дозагрузочная проверка может быть излишней. Дозагрузочная проверка была бы возможна, но не в случае загрузки через браузер, т.к. JS работа в браузерной песочнице не имеет доступа к файловой системе.

22K
17 апреля 2009 года
kotelius
75 / / 08.08.2008
Цитата: Phodopus
Возможно. Только чтобы посчитать в PHP MD5 файла, его придется сначала загрузить на сервер. Полностью



Я приблезительно так и предполагал, вот только не знал возможно ли каким-то образом передать MD5 файла до загрузки его на сервер - оказывается что нельзя.

to arnabius: В таком случае, здесь наверное уже лучше делать послезагрузочную проверку, и вслучае дублицирования удалять один из файлов, а пользователю выдавать сообщение, что точно такой же файл уже существует (пусть даже он и с другим именем). Но это все, конечно же, имеет смысл если вы делаете это ради экономии места на сервере, а если ради эстетичности, то, имхо, нету смысла - посмотрите на Ютуб.

6.5K
18 апреля 2009 года
arnabius
15 / / 07.10.2004
Спасибо всем за помощь! Так и буду делать: после загрузки проверять md5_file.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог