2013-04-28 6 views
0

У меня есть аудиопоток с внешнего сервера и я не могу выполнить никаких изменений на сервере. В настоящее время он работает довольно хорошо, но он способен передавать песни только в аудио-элемент HTML5. Я также хотел бы реализовать функцию загрузки, проблема в том, что ссылка ничего не загружает, она автоматически передает потоки mp3. HTML5 download attirbute ничего не делает.Force Загрузить аудиопоток

Полные заголовки отклика на сервере:

Accept-Ranges:bytes 
Cache-Control:no-cache, no-store, must-revalidate 
Connection:close 
Content-Length:6991749 
Content-Type:audio/mpeg 
Date:Sun, 28 Apr 2013 19:40:49 GMT 
Expires:Sat, 26 Jul 1997 05:00:00 GMT 
Last-Modified:Thu, 10 Jan 2013 18:59:31 GMT 
Server:nginx/1.0.2 

Он должен работать полностью в JavaScript, если это возможно без PHP прокси и т.д. - спасибо!

+0

Вы хотлинкинг или что-то еще? – Ejaz

+0

Я транслирую с http://grooveshark.com или что вы хотели знать? (мой английский не самый лучший, извините) – Marius

ответ

0

Я сделал это сейчас, Проблема заключалась в том, что сервер автоматически отказал в доступе к временному созданному URI потока, когда он был запрошен один раз. Я просто закомментировал элемент аудио HTML5 и только разместил ссылку для загрузки с новым HTML5 Скачать атрибут

<a href="stream.com/stream.mp3" download="filename.mp3"> 

Если я не был бы установить «загрузить» атрибут, браузер должен автоматически потоковом файл. Thumbs up to HTML5!

0

Оказывается, мой первоначальный пессимизм (об этом невозможно) мог бы ввести в заблуждение. Вот демонстрационная версия, в которой используется какой-либо API-интерфейс HTML5 (не такой продвинутый, как некоторые из материалов, о которых я читал, но, похоже, ограничения безопасности полностью автоматизируют это немного недосягаем на данный момент, this demo работает в Firefox и Chrome, но я предполагаю, что только IE10 может стоять шанс на поддержку его.

var createObjectURL = function (file) { 
    if (window.webkitURL) { 
     return window.webkitURL.createObjectURL(file); 
    } else if (window.URL && window.URL.createObjectURL) { 
     return window.URL.createObjectURL(file); 
    } else { 
     return null; 
    } 
}, 
xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png', true); 
xhr.responseType = 'blob'; 

xhr.onload = function (e) { 
    if (this.status == 200) { 
     var url = createObjectURL(new Blob([this.response], { 
      type: 'image/png' 
     })); 
     var link = document.createElement('A'); 
     link.setAttribute('href', url); 
     link.setAttribute('Download', 'Name I Want it to have.png'); 
     link.appendChild(document.createTextNode('Download')); 
     document.getElementsByTagName('body')[0].appendChild(link); 

    } 
}; 
xhr.send(); 

Здесь я использую XMLHttpRequest запросить PNG, то я храню его в Blob и создания загрузки URL с некоторую дополнительную информацию, которая запускает браузер для загрузки актива вместо того, чтобы просто ссылаться на него (это то, что он будет делать с PNG). Я не смог найти URL-адрес Grooveshark, для которого не требуется какой-либо ключ сеанса, не знаю, будет ли это работать для вас, но это ограничение исходит от Groovshark ' чтобы предотвратить горячую ссылку на песни.

+0

Спасибо, выглядит довольно хорошо! Проблема в том, что страница также не позволяет мне никаких XMLhttpRequests из-за правила Access-Control-Allow-Origin. Может, Flash это сделает? EDIT: теперь он работает, атрибут загрузки HTML5 очень полезен, напишет мой собственный ответ! – Marius