Amazon AWS S3 для принудительного скачивания Mp3-файла вместо Stream It - PullRequest
5 голосов
/ 19 мая 2010

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

Любая помощь будет высоко ценится. Спасибо

Ответы [ 4 ]

9 голосов
/ 19 мая 2010

Для этого вам нужно установить заголовок Content-Disposition:

Content-disposition: attachment; filename=song.mp3

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

2 голосов
/ 10 апреля 2013

Это стало моим решением для принудительной загрузки файлов из AWS S3.

В сафари файлы загружались как файлы .html, пока я не перестал возвращать файл чтения и просто запустил функцию в одиночку.

  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();
    }
  }
2 голосов
/ 01 октября 2011

Хорошо, прошло много времени с тех пор, как вы спрашивали об этом, но у меня была та же проблема, и я хотел бы поделиться своим решением с сообществом, на случай, если кому-то еще понадобится решить эту проблему. Конечно, вы можете изменить Content-Type и Content-Disposition из консоли 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()); 

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

1 голос
/ 23 сентября 2016

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

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

Нажмите, чтобы добавить метаданные

Ключ: содержание-расположение Значение: вложение

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...