Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Ужасные пути к файлам? Найдено решение!!!

22.06.2007, 18:32
zhilin
Жилин А.С.

Зарегистрирован:
2007-02-14
Сообщений: 108

Пишу в поддержку:
Цитата:
У моего заказчика требование сделать урлы у файлов с названиями исходных файлов и расширением в другой директории. Получится ли это реализовать (естественно не отказываясь от полей типа файл)?


Ответ поддержки:
Цитата:
Нет. Переопределение расположения и названия закачиваемого файлы будет является вмешательством в файловую систему NetCat, что может привести к непредсказуемым последствиям. Если Вы нуждается в том, чтобы хранить файлы в каталоге отличном от netcat_files с другими именами, Вас следует полностью отказаться от полей шаблона типа Файл и реализовавывать закачку/редактирование/отображение самостоятельно


Я не могу отказаться от полей типа файл из-за необходимого функционала этих полей в NetCat. Найдено решение реализации путей к файлам не вмешиваясь в файловую систему через modrewrite.

В списке объектов выбираем ID и Название_файла файла через запрос "SELECT ID, Real_Name FROM Filetable WHERE Message_ID = $f_RowID AND Field_ID = 333" , где 333 - это ID поля шаблона.

Потом формируем путь к файлу /img/ID/RealName (или /img/ID_RealName), получается что-то вроде /img/34/name.gif (img/34_name.gif), где 34 - это ID файла в таблице Filetable.


В папку img кидаем файл index.php и .htaccess

В .htaccess прописываем что-то типа
RewriteRule ^([0-9-]+)_?$ index.php?img=$1 [L]
// для /img/34/name.gif:
RewriteRule ^([0-9-]+)/?$ index.php?img=$1 [L]

т.е. из "34_name.gif" берем "34" и передаем его в файл index.php в парамерт $img.
Можно урл делать проще /34/, но лучше формировать с названием файла 34_name.gif (34/name.gif) чтобы пользователь мог потом сохранить с хорошим именем.

В файле index.php делаем запрос к базе "SELECT Virt_Name, File_Type FROM Filetable WHERE ID = '$img'" и получаем его виртуальное имя "9a9649c888b5d845333a833ef8a0599e" и тип файла. Остается добавить только

header("Content-type: тип_файла");
if(@readfile(путь_к_файлам/виртуальное_имя));
else die ("Нет такого файла");

Красота! Можно пойти дальше, и отдавать файлы только избранным группам.

p.s. Разработчики говорят - ужасные пути сделаны для того чтобы никто не догадался и чтобы можно было закачивать файлы с любыми одинаковыми именами в любой кодировке. В нашем случае все это остается работать - путь к файлу 34_Может_содержать_все_что_угодно.txt, так как скрипт обрабатывает только id "34".

p.s.s. Господа разработчики! Я до сих пор так и не понял почему бы не добавить функционал чтобы можно было выбирать директорию для храниния файла. При этом название можно транслитом переводить в латиницу и при необходимости (если название совпало) добавлять новый ID в конец файла.

Хорошая ссылка по теме: http://www.netcat.ru/support/ncforum/?Subdiv_ID=3&Topic_ID=48
23.06.2007, 13:51
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

У меня была такая идея, но у нашей компании с файлами намного сложнее, они должны храниться именно в исходном виде с исходным названием (это файлы прошивок к железу и т.п.), потому как мы делаем html копию нашего сайта и выдаем на выставках и семинарах болванку с кучей информации по нашей компании в том числе и копию сайта, исключая инет-магазин. И как Вы сами понимаете без установленного апача работа .htaccess невозможна... грустный и конечный клиент не получит требуемого результата.

Во всех других случаях, думаю, что Ваш вариант прокатит как альтернативное решение, не требуя вмешательств в движок! Аминь! =)

ЗЫ: (для разработчиков неткета) Я всё-таки по прежнему настаиваю вот на таком решении http://netcat.ru/support/ncforum/?Subdiv_ID=3&Topic_ID=48#121

Temet nosce...
25.06.2007, 11:18
zhilin
Жилин А.С.

Зарегистрирован:
2007-02-14
Сообщений: 108

+
02.08.2007, 22:05
AlexF

Зарегистрирован:
2007-07-21
Сообщений: 6

+1
нужна возможность сохранения оригинальных имен файлов.
198 196 2007-08-02 22:05:26 9027
Описание проекта