Как записать данные localStorage в текстовый файл в Chrome
Я хочу записать элемент localStorage в текстовый файл и вызвать пользователя для хранения файла в указанном месте. Пожалуйста, помогите мне с расширением кода
var data = JSON.parse(localStorage.getItem(pid));
var Text2Write = "";
for(var pr in ele)
{
var dat = pr + ":" + ele[pr] + "n";
Text2Write += dat;
}
// Here I want to store this Text2Write to text file and ask user to save where he wants.
пожалуйста, помогите мне расширить этот код.
5 ответов
Если вы не хотите использовать серверное решение (конечно, не обязательно PHP), самый простой способ-использовать URI данных:
data:text/plain,Your text here
Это покажет текстовый файл в браузере, и позволяет пользователю сохранить его там, где они хотят. Я не думаю, что можно показать диалог"Сохранить как" для таких URI: s.
Примечание: Для этого требуется IE8 по крайней мере. Но я предполагаю, что это ваше требование в любом случае, так как вы используете localStorage.
Я нашел эту консоль.метод save (data, [filename]) вы можете добавить в консоль, которая делает трюк довольно легко. Обратите внимание, что при загрузке файла он просто переходит непосредственно в папку загрузки по умолчанию. Чтобы добавить его, просто запустите:
(function(console){
console.save = function(data, filename){
if(!data) {
console.error('Console.save: No data')
return;
}
if(!filename) filename = 'console.json'
if(typeof data === "object"){
data = JSON.stringify(data, undefined, 4)
}
var blob = new Blob([data], {type: 'text/json'}),
e = document.createEvent('MouseEvents'),
a = document.createElement('a')
a.download = filename
a.href = window.URL.createObjectURL(blob)
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':')
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
a.dispatchEvent(e)
}
})(console)
затем передайте данные и имя файла, например, консоль.сохраните (data, [filename]), и файл будет создан и загруженный.
источник:
поскольку вопрос помечен расширением google-chrome, я хочу предоставить более простое решение для разработчиков расширений.
во-первых, добавьте "загрузки" в разрешения в manifest.json
"permissions": [
"downloads"
]
затем используйте downloads-API с data:text/plain
трюк, как предусмотрено @emil-stenström.
var myString = localStorage.YOUR_VALUE;
chrome.downloads.download({
url: "data:text/plain," + myString,
filename: "data.txt",
conflictAction: "uniquify", // or "overwrite" / "prompt"
saveAs: false, // true gives save-as dialogue
}, function(downloadId) {
console.log("Downloaded item with ID", downloadId);
});
чтобы адаптироваться к JSON, просто подготовьте свой объект или массив с помощью JSON.stringify(localStorage.YOUR_DATA)
, а затем использовать data:text/json
и измените окончание файла на .json
Я также хотел сохранить текст локального хранилища в файл для загрузки, и код работает на рабочем столе для Safari, Chrome и Firefox на Mac. Тем не менее, я думаю, что в iOS невозможно сохранить Blob() в любом месте с Chrome или Firefox. Это действительно работает, что интересно в Safari. Например, я могу сохранить текстовый файл в приложении Wunderlist. Вот ссылка моего РЕПО на Github:кошачий Шептун на Github GH-страницах
вот JavaScript код:
const fileDownloadButton = document.getElementById('save');
function localStorageToFile() {
const csv = JSON.stringify(localStorage['autosave']);
const csvAsBlob = new Blob([csv], {type: 'text/plain'});
const fileNameToSaveAs = 'local-storage.txt';
const downloadLink = document.getElementById('save');
downloadLink.download = fileNameToSaveAs;
if (window.URL !== null) {
// Chrome allows the link to be clicked without actually adding it to the DOM
downloadLink.href = window.URL.createObjectURL(csvAsBlob);
downloadLink.target = `_blank`;
} else {
downloadLink.href = window.URL.createObjectURL(csvAsBlob);
downloadLink.target = `_blank`;
downloadLink.style.display = 'none';
// add .download so works in Firefox desktop.
document.body.appendChild(downloadLink.download);
}
downloadLink.click();
}
// file download button event listener
fileDownloadButton.addEventListener('click', localStorageToFile);
вы должны записать этот контент в текстовый файл, который можно загрузить с помощью PHP. С JavaScript это невозможно, я думаю. Вы можете отправить POST-запрос в файл php, который можно загрузить в виде текстового файла.