【问题标题】:Change to original file name when Download?下载时更改为原始文件名?
【发布时间】:2011-05-13 08:42:57
【问题描述】:

我通过使用此 API 将亚马逊 S3 服务与 PHP 一起使用
https://github.com/tpyo/amazon-s3-php-class
我像这样将 url 传递给客户端

https://domain.s3.amazonaws.com/bucket/filename_11052011111924.zip?AWSAccessKeyId=myaccesskey&Expires=1305311393&Signature=mysignature

所以当客户端点击或粘贴 URL 到浏览器时,下载的文件名为 filename_11052011111924.zip。但我将原始文件名存储在 DB 中。

所以是否可以在单独将 URL 传递给客户端并使用原始文件名下载时进行下载。我不确定这是否对我有帮助。

Content-Disposition: attachment; filename=FILENAME.EXT
Content-Type: application/octet-stream

【问题讨论】:

  • 此问题的重复,请参阅答案。 LINK

标签: php amazon-s3


【解决方案1】:

如果您在将文件上传到 S3 时设置了您在文件中列出的标头,则您能够下载具有原始文件名的文件。 (您也可以在 S3 中的现有文件上设置这些 - 请参阅 AWS 文档)

我不确定您的库是否支持此功能,但您可以使用 AWS S3 SDK

类似的东西(我不知道 php 所以检查语法):

// Instantiate the class
$s3 = new AmazonS3();

$response = $s3->create_object('bucket', 'filename_11052011111924.zip', array(
    'fileUpload' => 'filename.zip',
    'contentType' => 'application/octet-stream',
    'headers' => array( // raw headers
        'Content-Disposition' => 'attachment; filename=filename.zip',
    ),
));

更新

您还可以在每次生成新网址时调整某些标题。见http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/get_object_url

$url = $s3->get_object_url('bucket', 'filename_11052011111924.zip', '5 minutes', array(
    'response' => array(
          'Content-Disposition' => 'attachment; filename=filename.zip'
    )
));

【讨论】:

    【解决方案2】:

    我认为这行不通(不过我从未尝试过)。您可能需要先将文件下载到您的服务器,然后使用标头,一旦完成(或稍后使用一些机器人或 cron),您可以删除文件。

    这种方法会占用您的带宽。

    【讨论】:

    • 这是不正确的。您可以使用原始问题中的标题设置“下载文件名”。看我的回答。
    • @Geoff;谢谢你的信息。正如我在评论中所写的那样,我从未尝试过,当然他们的类/API 可以像您的回答那样带来解决方案。现在我们怎么联系他?他接受了我的回答作为解决方案,但有办法做到这一点。
    【解决方案3】:

    是的,您可以告诉 AWS 必须如何命名输出文件:

    注意:我们对文件名进行编码!

    $filename = "Here we can have some utf8 chars.ext";
    $outputFileName = '=?UTF-8?B?' . base64_encode($filename) . '?=';
    $url = $s3->get_object_url(
       'bucket_name', 
       'path_to_the_file.ext', 
       '5 minutes', 
       array(
          'response' => array(
              'content-disposition' => 'attachment;' . " filename=\"" . $outputFileName . "\";")
          )
       )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2013-12-27
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多