2011-05-13 113 views
3

我使用亚马逊S3服务的PHP使用此API
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.But我的原始文件名存储在数据库中。

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

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

重复这个问题,看它的答案。 ** [LINK](http://stackoverflow.com/questions/2611432/amazon-s3-change-file-download-name)** – 2011-05-13 09:06:10

回答

1

我不认为这会工作(我从来没有尝试过)。您可能需要先将文件下载到您的服务器,稍后再使用标题,一旦完成(或稍后使用某个bot或cron),您可以删除文件。

此方法将使用您的带宽。

+0

这是不正确的。您可以使用原始问题中的标题来设置'下载文件名'。看到我的答案。 – 2011-05-13 16:25:36

+0

@Geoff;谢谢你的信息。正如我在我的评论中写的,我从来没有尝试过,当然他们的类/ API可以带来解决方案,就像你的答案一样。现在我们该怎么联系他?他接受我的答案作为解决方案,而有办法做到这一点。 – Revenant 2011-05-13 21:08:38

6

如果您将文件上载到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', 
    ), 
)); 

更新

您也可以在每次生成一个新的URL时间调整某些头。见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' 
    ) 
)); 
0

是的,你可以告诉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 . "\";") 
    ) 
    ) 
); 
相关问题