Принудительная загрузка с php на Amazon S3

Вы можете использовать DateDiff( ms, '00:00:00', e.Duration ) для преобразования времени в целое число миллисекунд. Используйте это для своей совокупности, а затем преобразуйте результат обратно, например. Cast( DateAdd( ms, 1234, '00:00:00' ) as Time ).

13
задан michaelespinosa 15 May 2009 в 18:40
поделиться

5 ответов

Сценарии 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.

Сделайте это с любым файлом, который вы действительно хотите загружать «встроенным» в браузер.

Приятная часть этого решения состоит в том, что приложения, которые загружают медиафайлы напрямую (например, скажем, mp3-плеер во Flash) не работают. t заботится о типе содержимого или о расположении содержимого, поэтому вы все равно можете воспроизводить файлы в браузере, а затем ссылаться на него для загрузки того же файла. Если пользователь уже завершил загрузку файла во флеш-памяти, он, скорее всего, все еще будет иметь его в своем кеше, а это означает, что загрузка будет очень быстрой и даже не будет стоить вам дополнительных затрат на пропускную способность от S3.

Сделайте это с любым файлом, который вы действительно хотите загружать «встроенным» в браузер.

Приятная часть этого решения состоит в том, что приложения, которые загружают медиафайлы напрямую (например, скажем, mp3-плеер во Flash) не работают. t заботится о типе содержимого или о расположении содержимого, поэтому вы все равно можете воспроизводить файлы в браузере, а затем ссылаться на него для загрузки того же файла. Если пользователь уже завершил загрузку файла во флэш-памяти, он, скорее всего, все еще будет иметь его в кеше, а это означает, что загрузка будет очень быстрой и даже не будет стоить вам дополнительных затрат на пропускную способность от S3.

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

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

10
ответ дан 1 December 2019 в 19:15
поделиться

php просто загрузит файл на сервер, а не на клиент. помните, php ничего не делает на клиенте, он просто возвращает контент (html, javascript, css, xml, что угодно ...)

[править: добавлено для ясности]: php может обслуживать аудиоконтент, но вы хотите одновременно обслуживать веб-страницу и аудио. Чтобы добиться такого поведения клиента, вы должны заставить его запросить файл на основе HTML или JavaScript веб-страницы.

Таким образом, вы должны заставить клиента загрузить файл. Например, разместите на странице iframe с URL-адресом файла на s3. Используйте css, чтобы сделать iframe невидимым. Он должен отобразить страницу, загрузить и воспроизвести mp3.

В противном случае попробуйте использовать javascript, чтобы ускорить загрузку при загрузке страницы. Я не уверен, возможно ли это.

0
ответ дан 1 December 2019 в 19:15
поделиться

Так что измените мой пример, приведенный выше, чтобы он выглядел так


<?php

header('Content-Type: audio/mpeg');
header("Content-Disposition: attachment; filename={$_GET['file']};");

readfile("url to the file/{$_GET['file']}");

exit();

?>

Теперь вам нужно будет добавить туда некоторую проверку, чтобы не предоставлять миру доступ ко всем файлам, которые вы размещаете на S3, но это должно работать.

1
ответ дан 1 December 2019 в 19:15
поделиться

Я никогда не пробовал использовать хостинг Amazon S3, но у вас нет доступа к использованию там файлов .htaccess ? Затем вы можете установить Content-Type и Content-Disposition для всего каталога с помощью этой записи:

<IfModule mod_headers.c>
    <FilesMatch "\.(mp3)$">
            ForceType audio/mpeg
            Header set Content-Disposition attachment
    </FilesMatch>
</IfModule>
-3
ответ дан 1 December 2019 в 19:15
поделиться

Если вы используете такую ​​библиотеку, как Tarzan AWS , вы может добавлять мета-заголовки, которые amazon будет включать при извлечении файла. Посмотрите здесь, например, мета-параметр в функции update_object: http://tarzan-aws.com/docs/2.0/files/s3-class-php.html#AmazonS3.update_object

1
ответ дан 1 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: