Сохранить значение переменной {...} на диск в виде 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, время: 00:04. |