Скачивание mp3 файлов с использованием html5 blob в расширении chrome - PullRequest
4 голосов
/ 29 мая 2011

Я пытаюсь создать расширение google-chrome, которое будет загружать файл mp3. Я пытаюсь использовать капли HTML5 и iframe для запуска загрузки, но, похоже, это не работает. Вот мой код:

var finalURL = "server1.example.com/u25561664/audio/120774.mp3";

var xhr = new XMLHttpRequest();
    xhr.open("GET", finalURL, true);
    xhr.setRequestHeader('Content-Type', 'application/octet-stream');
    xhr.onreadystatechange = function() 
    {
        if(xhr.readyState == 4 && xhr.status == 200) 
        {   
            var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)();
            bb.append(xhr.responseText);
            var blob = bb.getBlob("application/octet-stream");

            var saveas = document.createElement("iframe");
            saveas.style.display = "none";

            saveas.src = window.webkitURL.createObjectURL(blob); 

            document.body.appendChild(saveas);

            delete xhr;
            delete blob;
            delete bb;
        }
    }
 xhr.send();

При просмотре в консоли BLOB-объект создается правильно, настройки выглядят правильно:

размер: 15312172 тип: "application / octet-stream"

Однако, когда я пробую ссылку, созданную createObjectURL(),

блоб: хром-расширение: // dkhkkcnjlmfnnmaobedahgcljonancbe / b6c2e829-c811-4239-bd06-8506a67cab04

Я получаю пустой документ и предупреждение о том, что

Ресурс интерпретируется как Документ, но передается с типом MIME приложения / октет-поток.

Как получить мой код для правильной загрузки файла?

Ответы [ 2 ]

5 голосов
/ 21 сентября 2011

У меня в Google chrome работает приведенный ниже код 14.0.835.163:

var finalURL = "http://localhost/Music/123a4.mp3";
var xhr = new XMLHttpRequest();
xhr.overrideMimeType("application/octet-stream");
//xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
xhr.open("GET", finalURL, true);
xhr.responseType = "arraybuffer";
xhr.onload = function() {
      var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)();
      var res = xhr.response;
      if (res){
          var byteArray = new Uint8Array(res);
      }
      bb.append(byteArray.buffer);
      var blob = bb.getBlob("application/octet-stream");
      var iframe = document.createElement("iframe");
      iframe.style.display = "none";
      iframe.src = window.webkitURL.createObjectURL(blob);
      document.body.appendChild(iframe);
};
xhr.send(null);
0 голосов
/ 29 мая 2011

Я не уверен, но я думаю, что это проблема вашего сервера. Я только что попробовал ваш кусок кода, чтобы загрузить образец блоба mp3-файла, и все прошло нормально. Так что может быть:

  1. этот файл не существует на вашем сервере
  2. ваш сервер выводит неверный тип MIME для mp3-файлов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...