如何使用 content-disposition header 设置下载的 UTF-8 文件名?
How to use the content-disposition header to set a downloaded UTF-8 filename?
我正在将我的文件存储在 Amazon Cloud Drive 上。并且有选项可以设置 response-content-disposition
以直接从亚马逊发送 link。
来自API:
response-content-disposition
: (Optional) If specified, the content-disposition of the response will be set to this value
我需要设置它下载mp3文件。我不需要在浏览器上播放它。
我想设置下载的文件名:Эльбрус Джанмирзоев - Кавказская любовь.mp3
我尝试了很多方法...Urlencode...Urlencode + http 构建查询等...
但现在的结果是:Эльбрус+Джанмирзоев+-+Кавказская+любовь.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');
?>
这个代码 returns 我这个 link:
如果我输入这个 link Chrome 用这个名字保存这个文件:
Эльбрус+Джанмирзоев+-+Кавказская+любовь.mp3
但我需要用这个名称直接保存文件:
Эльбрус Джанмирзоев - Кавказская любовь.mp3
我的错误在哪里?
明白了!我需要使用 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');
?>
我正在将我的文件存储在 Amazon Cloud Drive 上。并且有选项可以设置 response-content-disposition
以直接从亚马逊发送 link。
来自API:
response-content-disposition
: (Optional) If specified, the content-disposition of the response will be set to this value
我需要设置它下载mp3文件。我不需要在浏览器上播放它。
我想设置下载的文件名:Эльбрус Джанмирзоев - Кавказская любовь.mp3
我尝试了很多方法...Urlencode...Urlencode + http 构建查询等...
但现在的结果是:Эльбрус+Джанмирзоев+-+Кавказская+любовь.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');
?>
这个代码 returns 我这个 link:
如果我输入这个 link Chrome 用这个名字保存这个文件:
Эльбрус+Джанмирзоев+-+Кавказская+любовь.mp3
但我需要用这个名称直接保存文件:
Эльбрус Джанмирзоев - Кавказская любовь.mp3
我的错误在哪里?
明白了!我需要使用 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');
?>