Amazon AWS S3 для принудительной загрузки Mp3-файла вместо его потоковой передачи


Я использую Amazon S3, чтобы поместить mp3-файл, а затем разрешить нашему посетителю сайта загрузить mp3 из Amazon AWS. Я использую S3Fox для управления файлом, все, кажется, работает нормально до недавнего времени мы получили много жалоб от посетителя, что mp3 транслировался через браузер вместо отображения диалога сохранения браузера. Я пытаюсь для некоторых mp3 и замечаю, что для некоторых mp3 появляется диалоговое окно Сохранить, а для некоторых других они транслируются через браузер. Что я могу сделать, чтобы заставить mp3-файл быть загружается вместо потоковой передачи через веб-браузер....

Любая помощь будет очень признательна. Спасибо

4   5  

4 ответа:

Для этого необходимо задать заголовок Content-Disposition:

Content-disposition: attachment; filename=song.mp3

Я не думаю, что это возможно с S3Fox. Вы можете использовать Bucket Explorer (не бесплатно) или написать сценарий для загрузки файлов.

Хорошо, прошло много времени с тех пор, как вы спрашивали об этом, но у меня была та же проблема, и я хотел бы поделиться своим решением с сообществом, просто на случай, если кому-то еще нужно решить эту проблему. Конечно, вы можете изменить тип контента и расположение контента с консоли Amazon S3, но самое интересное-это сделать это программно.

Следующий код прекрасно работает для меня:

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()); 

Надеюсь, что это может помочь другим, борющимся с той же проблемой.

Это оказалось моим решением для принудительной загрузки файлов из 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 [email protected] 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();
    }
  }

В окне консоли управления s3 щелкните правой кнопкой мыши и выберите пункт Свойства.

Нажмите на метаданные.

Нажмите добавить дополнительные метаданные

Ключ: содержание-диспозиция Значение: привязанность

Сохранить. Это все.

Вот изображение http://i.imgur.com/2PWK3xF.jpg