Как использовать заголовок content-disposition для установки загруженного имени файла UTF-8?

Я храню свои файлы на Amazon Cloud Drive. И есть вариант для настройки response-content-disposition прямые ссылки из Амазонки.

Из API:

response-content-disposition: (Необязательно) Если указано, для содержания ответа будет установлено это значение

Мне нужно установить его скачать mp3 файлы. Мне не нужно играть в браузере.

И я хочу установить имя загруженного файла: Эльбрус Джанмирзоев - Кавказская любовь.mp3

Я перепробовал много способов … Urlencode … Urlencode + http build запрос и т.д …

Но теперь результат: Эльбрус+Джанмирзоев+-+Кавказская+любовь.mp3 при загрузке файлов.

А вот и мой php-код:

<?php
function file_generate_download_link($filename = false, $force = true)
{
$json['tempLink'] = 'https://content-na.drive.amazonaws.com/cdproxy/templink/iTwUqoQ3cJXOpj6T8SCDmKwtF37TAENiSLQzy7pTSbkFfJttb';
$url = $json['tempLink'];
if($force)
{
$data['download'] = 'true';
}
if($filename)
{
$data['response-content-disposition'] = ' attachment; filename*=UTF-8\'\''.urlencode($filename).'';
}
if(isset($data)) {
$data = http_build_query($data);
$url .= '?' . $data;
}
return $url;

}

echo file_generate_download_link($filename = 'Эльбрус Джанмирзоев - Кавказская любовь.mp3');
?>

Этот код возвращает мне эту ссылку:

https://content-na.drive.amazonaws.com/cdproxy/templink/iTwUqoQ3cJXOpj6T8SCDmKwtF37TAENiSLQzy7pTSbkFfJttb?download=true&Ответ-Content-Disposition = + вложение% 3B + имя_файла% 2A% 3DUTF-8% 27% 27% 25D0% 25AD% 25D0% 25bb% 25D1% 258C% 25D0% 25B1% 25D1% 2580% 25D1% 2583% 25D1% +2581 % 2B% 25D0% 2594% 25D0% 25B6% 25D0% 25B0% 25D0% 25BD% 25D0% 25BC% 25D0% 25B8% 25D1% 2580% 25D0% 25B7% 25D0% 25BE% 25D0% 25B5% 25D0% 25B2% 2B-% 2B% 25D0% 259A% 25D0% 25B0% 25D0% 25B2% 25D0% 25BA% 25D0% 25B0% 25D0% 25B7% 25D1% +2581% 25D0% 25BA% 25D0% 25B0% 25D1% 258F% 2B% 25D0% 25bb% 25D1% 258E% 25D0% 25B1% 25D0% 25BE% 25D0% 25B2% 25D1% 258C.mp3

Если я введу эту ссылку, Chrome сохранит этот файл с таким именем:

Эльбрус+Джанмирзоев+-+Кавказская+любовь.mp3

Но мне нужно сохранить файл с таким именем:

Эльбрус Джанмирзоев - Кавказская любовь.mp3

Где моя ошибка?

2

Решение

Попался! Мне нужно использовать функцию rawurlencode!

Итак, правильный код:

<?php
function file_generate_download_link($filename = false, $force = true)
{
$json['tempLink'] = 'https://content-na.drive.amazonaws.com/cdproxy/templink/iTwUqoQ3cJXOpj6T8SCDmKwtF37TAENiSLQzy7pTSbkFfJttb';
$url = $json['tempLink'];
if($force)
{
$data['download'] = 'true';
}
if($filename)
{
$data['response-content-disposition'] = ' attachment; filename*=UTF-8\'\''.rawurlencode($filename).'';
}
if(isset($data)) {
$data = http_build_query($data);
$url .= '?' . $data;
}
return $url;

}

echo file_generate_download_link($filename = 'Эльбрус Джанмирзоев - Кавказская любовь.mp3');
?>
1

Другие решения

Других решений пока нет …