2012-11-02 20 views
6

Obecnie pracujemy nad udostępnieniem użytkownikom opcji pobierania plików MP3. Rozwijamy aplikację, która w pełni wykonuje się w systemie lokalnym, który nie wymaga serwera.Opcja pobierania plików przy użyciu skryptu klienta w systemie klienta

Ale pobieranie plików mp3 nie działa w większości przeglądarek. Jest otwierany w wbudowanych odtwarzaczach multimedialnych w większości przeglądarek.

Sprawdziliśmy rozwiązania w tym zakresie, ponieważ otrzymujemy odpowiedzi, takie jak ustawienie "dyspozycji treści" za pomocą nagłówka po stronie serwera lub użycie skryptów PHP lub ASP, aby umożliwić ich pobranie.

Sprawdziłem również wtyczkę jquery filedownload.js. miał też sekcję taką jak ustawienie zawartości-disposition i set-cookie.

Chciałbym wiedzieć, że możliwe jest utworzenie łącza pobierania pliku (dla MP3) * kompatybilnego ze wszystkimi przeglądarkami przy użyciu tylko skryptów po stronie klienta, takich jak JavaScript lub jQuery.

Ważna uwaga:

Właściwie nie jest proces pobierania pliku z serwera, ale z systemu klienta samego.

To plik MP3 powinien zostać skopiowany z jednej lokalizacji (katalogu) do innej lokalizacji za pomocą systemu klienta.

+0

Aby się upewnić, że nie można zmienić nagłówków serwera, z którego pochodzą pliki mp3? – Dcullen

Odpowiedz

2

To rozwiązanie wymaga wsparcia przeglądarki z XHR2 (http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html)

To będzie pobrać MP3 do blob, a następnie utworzy adres URL, do którego możesz uzyskać dostęp do obiektu typu blob. W trakcie tego procesu można zastąpić typ MIME w razie potrzeby.

window.URL = window.URL || window.webkitURL; 

    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', 'http://robtowns.com/music/blind_willie.mp3', true); 
    xhr.responseType = 'blob'; 
    xhr.overrideMimeType('application/octet-stream'); 
    xhr.onload = function(e) { 
     if (this.status == 200) { 
      var blob = this.response; 
      $('#link').html('<a href="'+window.URL.createObjectURL(blob)+'">Download</a>'); 
     } 
    }; 

    xhr.send(); 

Przykład JSfiddle wymaga wyłączenia zabezpieczeń sieciowych w przeglądarce, aby umożliwić żądanie między domenami. http://jsfiddle.net/D2DzR/3/

+0

Dzięki za odpowiedź Dcullen. sprawdzamy za pomocą metody XHR2. Ale nie obsługuje przeglądarek IE. Mamy inne metody pracy z chrome i firefox. Potrzebujemy metody dla przeglądarek IE. – Ranjithsun