Сценарии php, которые были упомянуты до сих пор, будут работать нормально, но основным недостатком является то, что каждый раз, когда посетитель на вашем сайте запрашивает файл, ваши собственные серверы загружают его с S3, а затем передают эти данные в браузер. Для сайтов с низким трафиком это, вероятно, не имеет большого значения, но для сайтов с высоким трафиком вам определенно следует избегать запуска всего через свои собственные серверы.
К счастью, есть довольно простой способ настроить принудительную загрузку файлов с S3. И вы совершенно правы - вы просто хотите установить content-type и content-disposition (просто установка content-disposition будет работать в некоторых браузерах, но установка обоих должна работать во всех браузерах).
В этом коде предполагается, что вы используете класс PHP Amazon S3 из Undesigned:
<?php
// set S3 auth and get your bucket listing
// then loop through the bucket and copy each file over itself, replacing the "request headers":
S3::copyObject($bucketName, $filename, $bucketName, $filename, "public-read", array(), array("Content-Type" => "application/octet-stream", "Content-Disposition" => "attachment"));
?>
Теперь все ваши файлы будут загружены принудительно. Возможно, вам придется очистить кеш, чтобы увидеть изменения. И, очевидно, не делайте этого ни с одним файлом, который вы действительно хотите загрузить «встроенным» в браузер.
Приятная часть этого решения заключается в том, что приложения, которые загружают медиафайлы напрямую (например, mp3-плеер во Flash), не заботятся о типе контента или его расположении, поэтому вы все равно можете воспроизводить свои файлы в браузере, а затем ссылка для загрузки того же файла. Если пользователь уже завершил загрузку файла во флэш-памяти, он, скорее всего, все еще будет иметь его в своем кеше, что означает, что их загрузка будет очень быстрой, и это даже не будет стоить вам дополнительных затрат на пропускную способность от S3.
person
Ben
schedule
21.12.2009