下载时更改为原始文件名?

时间:2011-05-13 08:42:57

标签: php amazon-s3

我使用这个API使用PHP的亚马逊S3服务      https://github.com/tpyo/amazon-s3-php-class
   我正在将网址传递给客户端

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

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

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

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

3 个答案:

答案 0 :(得分: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',
    ),
));

<强>更新

每次生成新网址时,您也可以调整某些标题。见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'
    )
));

答案 1 :(得分:1)

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

此方法将使用您的带宽。

答案 2 :(得分: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 . "\";")
      )
   )
);