Amazon AWS S3 для принудительной загрузки Mp3-файла вместо его потоковой передачи
Я использую Amazon S3, чтобы поместить mp3-файл, а затем разрешить нашему посетителю сайта загрузить mp3 из Amazon AWS. Я использую S3Fox для управления файлом, все, кажется, работает нормально до недавнего времени мы получили много жалоб от посетителя, что mp3 транслировался через браузер вместо отображения диалога сохранения браузера. Я пытаюсь для некоторых mp3 и замечаю, что для некоторых mp3 появляется диалоговое окно Сохранить, а для некоторых других они транслируются через браузер. Что я могу сделать, чтобы заставить mp3-файл быть загружается вместо потоковой передачи через веб-браузер....
Любая помощь будет очень признательна. Спасибо
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 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(); } }
В окне консоли управления s3 щелкните правой кнопкой мыши и выберите пункт Свойства.
Нажмите на метаданные.
Нажмите добавить дополнительные метаданные
Ключ: содержание-диспозиция Значение: привязанность
Сохранить. Это все.
Вот изображение http://i.imgur.com/2PWK3xF.jpg