【问题标题】:How to use the content-disposition header to set a downloaded UTF-8 filename?如何使用 content-disposition 标头设置下载的 UTF-8 文件名?
【发布时间】:2016-08-25 21:36:24
【问题描述】:

我将文件存储在 Amazon Cloud Drive 上。并且可以选择将response-content-disposition 设置为来自亚马逊的直接链接。

来自 API:

response-content-disposition:(可选)如果指定,则响应的内容处置将设置为此值

我需要设置它下载 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');
?>

此代码返回此链接:

https://content-na.drive.amazonaws.com/cdproxy/templink/iTwUqoQ3cJXOpj6T8SCDmKwtF37TAENiSLQzy7pTSbkFfJttb?download=true&response-content-disposition=+attachment%3B+filename%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

我的错误在哪里?

【问题讨论】:

  • 你得到的文件名和你想要的文件名完全一样。你到底在找什么?
  • 不,它用加号创建空格。但是现在空间很好:)

标签: php header content-disposition


【解决方案1】:

明白了!我需要使用 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');
?>

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 2018-08-30
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2019-12-29
    • 2015-05-12
    • 2011-12-23
    相关资源
    最近更新 更多