Сохранить значение переменной {...} на диск в виде json-файла.
Непосредственно задача:
function objSave(Obj) {
let Temp = document.createElement('A');
Temp.href = 'data:application/octet-stream;charset=windows-1251,' + encodeURIComponent(JSON.stringify(Obj, null, 2));
Temp.download = 'file_' + (Date.now() / 1000 | 0) + '.json';
document.body.appendChild(Temp);
Temp.click();
document.body.removeChild(Temp);
};
Оно даже работало, пока объект был мелким.Но когда объект серьёзно "распух", Chrome вместо скачивания стал писать: Цитата:
|
И что-то я не смог найти нормального источника по "href data" и полный список что вообще можно ставить вместо "application/octet-stream" (с особенностями последних)...
|
var saveJson = function(obj) {
var str = JSON.stringify(obj);
var blob = new Blob( [ str ], {
type: 'application/octet-stream'
});
var url = URL.createObjectURL( blob );
var link = document.createElement( 'a' );
link.setAttribute( 'href', url );
link.setAttribute( 'download', 'data.json' );
var event = document.createEvent( 'MouseEvents' );
event.initMouseEvent( 'click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
link.dispatchEvent( event );
}
var obj = [];
for(var i = 0; i<100000; i++) obj.push(Math.random());
saveJson(obj);
|
Цитата:
А ставить можно что угодно, это MIME-types Решение же самой проблемы - выше, хотя и излишне заморочен.) j0hnik, blob может принимать строку, не надо её кодировать.) |
Спасибо за ссылки! Откапал к ним в добавок такую: Список MIME-типов.
Пример из #3 очень помог, работает, по крайней мере файлы под 40МБ точно осиливает, огромное спасибо! А вот blob/url/link/event не надо как-то явно освобождать случайно? Но теперь просто интересно, а что же не так было с кодом в #1? Опробовал в нём менять на "text/plain" или "application/json" - без улучшений. Сократил encodeURIComponent() на encodeURI(), потом вообще убрал - без улучшений. |
Svorg, с первым кодом было просто ограничение максимальной длины url. Data: url тот ещё костыль по сути, просто запихивающий данные прям в адресную строку.)
|
Aetae,
Поправил, хорошее замечание |
Можно ли таким способом сохранять текущую страницу в PDF? что надо поменять?
|
| Часовой пояс GMT +3, время: 05:36. |