Код: Выделить всё
Yii::$app->response->sendFile($file)
Код: Выделить всё
Yii::$app->response->sendFile($file)
Экшн?отдает файл по названию экшена контроллера. Связано это с кодировкой файла. Он записан в русской (UTF-8) кодировке.
С каким? Как у экшена?Как мне получить файл с таким названием?
Вы пишите код по-русски?Если меняю на латиницу, то всё ок!
Ахах) Бывает.Loveorigami писал(а): ↑2019.05.24, 10:07 Вы прям, прирожденный Лектор. Написано много, но ничего не понятно...
Экшн?отдает файл по названию экшена контроллера. Связано это с кодировкой файла. Он записан в русской (UTF-8) кодировке.
С каким? Как у экшена?Как мне получить файл с таким названием?
Вы пишите код по-русски?Если меняю на латиницу, то всё ок!
Что тогда делаю не так? Не могу понять. Если не через yii, то название файла как нужноproctoleha писал(а): ↑2019.05.24, 20:07 У вас путаница в голове. В web нет РУССКОЙ кодировки UTF-8. Впрочем как и нерусской. Это раньше было актуально, навскидку приходят KOI-8, и CP-1251. А сейчас такого нет.
Поэтому осмелюсь предположить, что названия исходных файлов у вас записаны не в кодировке utf-8.
Код: Выделить всё
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));
}
Код: Выделить всё
$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;
}
Странно. А у меня так не работает. Значит искать проблему надо не в фреймворке. Я смотрел все эти методы фреймворка отдачи файлов. Вижу, что простые. Но почему-то не могу разобраться что не так. С чем связано.proctoleha писал(а): ↑2019.05.26, 08:51 Вот только что попробовал, ради интереса:Все нормально.Код: Выделить всё
$filePath = Yii::getAlias('@app/web/documents/444/'); Yii::$app->response->sendFile($filePath . 'русское имя.pdf');
Ок, смотрим исходники
Метод простой как две копейки, и для локализации проблемы вам достаточно исследовать почему basename($filePath); возвращает не то, что нужно в случае с кириллицей.Код: Выделить всё
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; }