亚马逊AWS S3强制下载Mp3文件而不是流式传输

时间:2010-05-19 10:43:58

标签: amazon-s3 amazon-web-services content-disposition

我正在使用Amazon S3放置mp3文件,然后允许我们的网站访问者从Amazon AWS下载mp3。我使用S3Fox来管理文件,一切看起来都很好,直到最近我们收到了很多来自访问者的投诉,即mp3是通过浏览器流式传输而不是显示浏览器保存对话框。 我尝试了一些mp3,并注意到对于某些mp3,会出现保存对话框,对于其他一些,它们会通过浏览器进行流式传输。我该怎么做才能强制下载mp3文件,而不是通过网络浏览器进行流式传输....

非常感谢任何帮助。 感谢

4 个答案:

答案 0 :(得分:9)

为此,您需要设置Content-Disposition标头:

Content-disposition: attachment; filename=song.mp3

我认为S3Fox无法做到这一点。您可以使用Bucket Explorer(非免费)或编写脚本来上传文件。

答案 1 :(得分:2)

好的,自从你问这个问题已经很久了,但是我遇到了同样的问题,我想与社区分享我的解决方案,以防其他人需要解决这个问题。当然,您可以从Amazon S3控制台更改Content-Type和Content-Disposition,但有趣的是以编程方式执行。

以下代码适用于我:

require_once '../sdk-1.4.2.1/sdk.class.php';

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

// Copy object over itself and modify headers
$response = $s3->copy_object(
    array( // Source
        'bucket' => 'your_bucket',
        'filename' => 'Key/To/YourFile'
    ),
    array( // Destination
        'bucket' => 'your_bucket',
        'filename' => 'Key/To/YourFile'
    ),
    array( // Optional parameters
        'headers' => array(
            'Content-Type' => 'application/octet-stream',
            'Content-Disposition' => 'attachment'
        )
    )
);

// Success?
var_dump($response->isOK()); 

希望它可以帮助其他人在同样的麻烦中挣扎。

答案 2 :(得分:2)

这最终成为我从AWS S3强制下载文件的解决方案。

在safari中,文件以.html文件的形式下载,直到我停止返回readfile并单独运行该函数。

  public function get_download($upload_id)
  {
    try {
      $upload = Upload::find($upload_id);
      if ($upload->deleted)
        throw new Exception("This resource has been deleted.");

      if ($upload->filename == '')
        throw new Exception("No downloadable file found.  Please email info@clouddueling.com for support.");

      header("Content-Description: File Transfer");
      header("Content-Type: application/octet-stream");
      header("Content-Disposition: attachment; filename={$upload->uploaded_filename};");

      readfile("https://s3.amazonaws.com/stackoverflow/uploads/" . $upload->filename);
      exit;
    } catch(Exception $e) {
      return $e->getMessage();
    }
  }

答案 3 :(得分:1)

在s3管理控制台窗口中,右键单击并选择属性。

点击元数据。

点击添加更多元数据

关键:内容处理 价值:附件

保存。就是这样。

这是图片http://i.imgur.com/2PWK3xF.jpg