Хранение файлов с русскими именами

Hell

Новичок
Хранение файлов с русскими именами

на хостинге установлена ОС freebcd, которая не поддерживает файлы с русскими именами.

как можно организовать хранение в таком случае?

у меня есть два предположения:

1. хранить в БД. но не знаю, как тогда сделать ссылку на этот файл, чтоб пользователь мог его скачать.

2. переименовывать файлы при сохранении на сервер, а соответствие новых имен и оригинальных хранить в файле или в БД. но как тогда переименовать файл при сохранении пользователем, чтоб пользователь без лишних действий сохранил его с оригинальным русским именем?
 

dimagolov

Новичок
Hell, я бы сильно не советовал добиваться того, чтобы юзер мог сохранить файл с оригинальным русским именем. добиться то этого можно, но у юзеров от этого тоже часто проблемы будут возникать. делай транслит имен и так их и отдавай.
 

Hell

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

dimagolov

Новичок
Hell, найди ресурс который такое делает и потом посохраняй такие файлы на разных версиях винды в разных браузерах (в т.ч. и без "русских" настроек location) и на всяхих mac-os-ах и linux-ах. посмотришь какой % успешных закачек у тебя будет.

п.с. если подобного ресурса не найдешь то это будет повод задуматься на тему "почему".
 

SiMM

Новичок
> а какие проблемы могут возникнуть?
В лучшем случае имя сохраняемого файла у пользователя будет крякозябрами.
RFC не предусмотрена кириллица в именах файлов, поэтому браузеры вольны трактовать её как угодно.
 

antson

Новичок
Партнер клуба
Hell
если заказчик сильно настаивает, то для ие, мозилы и оперы
под виндоуз существует частное решение.

Для оперы нужно отдавать в UTF-8 , мозила и ИЕ -1251.
Для остальных неопознаных тогда в транслите.

header("Content-type: application/octet-stream;charset=$ЧАРСЕТ;");
header("content-disposition: attachment; filename=\"$ВНУЖНОЙКОДИРОВКЕ\"");

Подумай еще над таким моментом.
Для отдачи файла тебе придется через модреврайт перенаправлять на скрипт или ссылки на файлы
давать в виде http://твойсайт/getfile.php?id=

Это грузит сервер намного сильнее чем прямая скачка.
плюс придется самому реализовывать поддержку докачки
 

Hell

Новичок
Автор оригинала: antson
Hell
если заказчик сильно настаивает, то для ие, мозилы и оперы
под виндоуз существует частное решение.

Для оперы нужно отдавать в UTF-8 , мозила и ИЕ -1251.
Для остальных неопознаных тогда в транслите.

header("Content-type: application/octet-stream;charset=$ЧАРСЕТ;");
header("content-disposition: attachment; filename=\"$ВНУЖНОЙКОДИРОВКЕ\"");
проблема не в том, в какой кодировке отобразить имя файла, а в принципиальной невозможности хранить файлы с русскими именами на сервере
 

antson

Новичок
Партнер клуба
Hell
тогда я не понимаю твоей проблемы.

Например к новости нужно присоединить файл, со стороны админки мне все равно как он назывался у пользователя,
и мне неважно с каким именем он будет сохранен у пользователя , главное чтобы расширение осталось темже.
Тогда я просто перекладываю загруженный файл с именем построенным по простому правилу от идентификатора новости. Если файлов будет немного например в течении 5 лет меньше 2000 и ФС юниксовая, то нет смысла их раскладывать по подпапкам .
files/newsXXXXX.ext а в самой таблице новостей достаточно
сохранить только расширение файла. Наличие которого
при выводе новости будет служить признаком необходимости сформировать ссылку для скачивания файла.

А вот если исходное имя файла должно сохраняться при сохранении файла посетителем , вот тогда читай мой предыдущий ответ.
 

dimagolov

Новичок
Hell, проблема именно в том, что тебе сказали. Средствами сервера отдать произвольный файл получив запрос http://site.ru/Музыка/Трям-брям.mp3 не представляет особой проблемы, хотя даже с корректным восприятием URL тоже будут сложности, так как разные браузеры (и даже один и тот же в разных случаях) шлют такие URL в разной кодировке. Понятно, что нужен будет скрипт-диспечер, который бы сопоставлял запрос реальным файлам.
 

Hell

Новичок
Автор оригинала: antson
Hell
тогда я не понимаю твоей проблемы.

Например к новости нужно присоединить файл, со стороны админки мне все равно как он назывался у пользователя,
и мне неважно с каким именем он будет сохранен у пользователя , главное чтобы расширение осталось темже.
Тогда я просто перекладываю загруженный файл с именем построенным по простому правилу от идентификатора новости. Если файлов будет немного например в течении 5 лет меньше 2000 и ФС юниксовая, то нет смысла их раскладывать по подпапкам .
files/newsXXXXX.ext а в самой таблице новостей достаточно
сохранить только расширение файла. Наличие которого
при выводе новости будет служить признаком необходимости сформировать ссылку для скачивания файла.

А вот если исходное имя файла должно сохраняться при сохранении файла посетителем , вот тогда читай мой предыдущий ответ.
все было верно. просто сначала не дошло на счет хидеров. спасибо. проблема решилась
 
Сверху