Страница 1 из 1
Send File в Кирилице [РЕШЕНО!]
Добавлено: 2019.05.23, 20:50
myks1992@mail.ru
Всем привет! У меня функция
отдает файл по названию экшена контроллера. Связано это с кодировкой файла. Он записан в русской (UTF-8) кодировке. Как мне получить файл с таким названием? Если меняю на латиницу, то всё ок!
Re: Send File в UTF 8
Добавлено: 2019.05.24, 10:07
Loveorigami
Вы прям, прирожденный Лектор. Написано много, но ничего не понятно...
отдает файл по названию экшена контроллера. Связано это с кодировкой файла. Он записан в русской (UTF-8) кодировке.
Экшн?
Как мне получить файл с таким названием?
С каким? Как у экшена?
Если меняю на латиницу, то всё ок!
Вы пишите код по-русски?
Re: Send File в UTF 8
Добавлено: 2019.05.24, 14:01
myks1992@mail.ru
Loveorigami писал(а): ↑2019.05.24, 10:07
Вы прям, прирожденный Лектор. Написано много, но ничего не понятно...
отдает файл по названию экшена контроллера. Связано это с кодировкой файла. Он записан в русской (UTF-8) кодировке.
Экшн?
Как мне получить файл с таким названием?
С каким? Как у экшена?
Если меняю на латиницу, то всё ок!
Вы пишите код по-русски?
Ахах) Бывает.
У меня аудио Файлы в mp3 формате. Пример названия: 2 - В лесу.mp3 Необходимо скачивать такие Файлы. Использую стандартное решение Yii. Вызывая sendFile сервер отдаёт файл, но при загрузке название меняется на название экшена контроллера: download-music.mp3 Связано это с русскими буквами в названии файла. Если файл переименовать в латиницу, то он загружает файл с названием файла, 2 - v lesu.mp3. Как мне загрузить файл стандартным решением yii и чтобы Файлы оставались с русским названием?
Сделал пока реализацию без yii, но хотелось бы чтобы работало как положено.
Re: Send File в UTF 8
Добавлено: 2019.05.24, 16:11
dmg
Передайте вторым параметром в sendFile имя файла
Re: Send File в UTF 8
Добавлено: 2019.05.24, 20:07
proctoleha
У вас путаница в голове. В web нет РУССКОЙ кодировки UTF-8. Впрочем как и нерусской. Это раньше было актуально, навскидку приходят KOI-8, и CP-1251. А сейчас такого нет.
Поэтому осмелюсь предположить, что названия исходных файлов у вас записаны не в кодировке utf-8.
Re: Send File в UTF 8
Добавлено: 2019.05.24, 21:08
myks1992@mail.ru
dmg писал(а): ↑2019.05.24, 16:11
Передайте вторым параметром в sendFile имя файла
Это пробовал
Re: Send File в UTF 8
Добавлено: 2019.05.24, 21:09
myks1992@mail.ru
proctoleha писал(а): ↑2019.05.24, 20:07
У вас путаница в голове. В web нет РУССКОЙ кодировки UTF-8. Впрочем как и нерусской. Это раньше было актуально, навскидку приходят KOI-8, и CP-1251. А сейчас такого нет.
Поэтому осмелюсь предположить, что названия исходных файлов у вас записаны не в кодировке utf-8.
Что тогда делаю не так? Не могу понять. Если не через yii, то название файла как нужно
Re: Send File в UTF 8
Добавлено: 2019.05.24, 22:21
dmg
Покажите код уже.
Re: Send File в UTF 8
Добавлено: 2019.05.24, 22:42
myks1992@mail.ru
dmg писал(а): ↑2019.05.24, 22:21
Покажите код уже.
Код: Выделить всё
public function actionDownloadMusicRequest($id)
{
$request = $this->findModel($id);
if (!$request->isMusicExists()) {
throw new NotFoundHttpException('The music does not exists.');
}
$music = $request->getUploader()->getPath() . DIRECTORY_SEPARATOR . $request->music;
return Yii::$app->response->sendFile($music, TranslatorHelper::translate($request->music));
}
Сейчас сделал TranslatorHelper который меняет русские буквы на латиницу. Но если убрать, то выдаст файл "download-music-request.mp3" вместо 2 - 17 - Oriental show_Дети_Соло_Открытый класс.mp3
Re: Send File в UTF 8
Добавлено: 2019.05.26, 08:51
proctoleha
Вот только что попробовал, ради интереса:
Код: Выделить всё
$filePath = Yii::getAlias('@app/web/documents/444/');
Yii::$app->response->sendFile($filePath . 'русское имя.pdf');
Все нормально.
Ок, смотрим исходники
Код: Выделить всё
public function sendFile($filePath, $attachmentName = null, $options = [])
{
if (!isset($options['mimeType'])) {
$options['mimeType'] = FileHelper::getMimeTypeByExtension($filePath);
}
if ($attachmentName === null) {
$attachmentName = basename($filePath);
}
$handle = fopen($filePath, 'rb');
$this->sendStreamAsFile($handle, $attachmentName, $options);
return $this;
}
Метод простой как две копейки, и для локализации проблемы вам достаточно исследовать почему basename($filePath); возвращает не то, что нужно в случае с кириллицей.
Re: Send File в UTF 8
Добавлено: 2019.05.26, 14:03
myks1992@mail.ru
proctoleha писал(а): ↑2019.05.26, 08:51
Вот только что попробовал, ради интереса:
Код: Выделить всё
$filePath = Yii::getAlias('@app/web/documents/444/');
Yii::$app->response->sendFile($filePath . 'русское имя.pdf');
Все нормально.
Ок, смотрим исходники
Код: Выделить всё
public function sendFile($filePath, $attachmentName = null, $options = [])
{
if (!isset($options['mimeType'])) {
$options['mimeType'] = FileHelper::getMimeTypeByExtension($filePath);
}
if ($attachmentName === null) {
$attachmentName = basename($filePath);
}
$handle = fopen($filePath, 'rb');
$this->sendStreamAsFile($handle, $attachmentName, $options);
return $this;
}
Метод простой как две копейки, и для локализации проблемы вам достаточно исследовать почему basename($filePath); возвращает не то, что нужно в случае с кириллицей.
Странно. А у меня так не работает. Значит искать проблему надо не в фреймворке. Я смотрел все эти методы фреймворка отдачи файлов. Вижу, что простые. Но почему-то не могу разобраться что не так. С чем связано.
Re: Send File в Кирилице [РЕШЕНО!]
Добавлено: 2019.05.26, 23:11
myks1992@mail.ru
Не знаю что сделал, но удалось скачать файл в Кириллице. Что-то видимо было)) Намучался с этим. И помогло то что не заметил(