2014-01-22 2 views
5

Я занимаюсь разработкой музыкального плеера на стороне клиента и ищу способ сохранить плейлисты в комплекте с mp3-данными.Является кросс-браузер Сохранить файл Как кнопка возможна?

localStorage Предел 5 мб для местных правил хранения, которые опцион отключен. Мне интересно, какие есть другие варианты.

DataURIs Я читал о dataURIs, например. Is there any way to specify a suggested filename when using data: URI? и Cross-browser Save As .txt , но не указывая на имя файла по умолчанию и, в частности, отсутствие поддержки IE, являются обработчиками.

IndexedDB HTML5 indexedDB and persistence lifetime предполагает, что IndexedDB не вариант для постоянного хранения.

Есть варианты, которых мне не хватает? Я надеюсь, что это так!

Спасибо, Andrew

+1

Таким образом, клиентская сторона, без участия сервера? Тогда я не понимаю, почему вы хотели бы скачать/сохранить mp3-данные, так как это должно быть уже на клиенте, правильно? И ограничение на 5 МБ для файлов плейлистов также не должно быть проблемой. – CBroe

+0

Откройте файл на новой вкладке браузера с измененными заголовками, что-то вроде 'Content-Disposition: attachment; имя файла = "playlist.txt" '. Я считаю, что это всегда заставляет сохранять как всплывающие окна в браузерах. – slash197

+0

Название и сам вопрос задают разные вещи. Сам вопрос добавляет еще больше путаницы, что именно вы хотите? – gpgekko

ответ

2

у меня теперь есть решение, которое работает в IE, Chrome и Firefox, вдохновленный этим: Javascript set file in download

Решение IE10 + использует msSaveBlob и код:

if (navigator.msSaveBlob) { 
    var blob_object = new Blob([store_string], {type: mime_type}); 
    return navigator.msSaveBlob(blob_object, filename); 

    } 

Для Chrome/Firefox он использует атрибут загрузки:

else if ('download' in a) { 
    blob_object = new Blob ([store_string], {type: mime_type}); 
    a.href = URL.createObjectURL(blob_object); 
    a.setAttribute("download", filename); 
    a.innerHTML = "downloading..."; 
    d.body.appendChild(a); 
    setTimeout(function() { 
     a.click(); 
     d.body.removeChild(a); 
    }, 66); 
    return true;  
} 

Я до сих пор не расследованы Safari, Opera или любые мобильные браузеры ...

2

Нет - кросс-браузерный решение SaveAs не представляется возможным.

Хром, IE, & FF поддерживает один или несколько способов программного запуска файла загрузки (и saveAs). Safari не поддерживает эту функциональность.

Смежные вопросы