Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сохранить данные в файл? (https://javascript.ru/forum/misc/83238-kak-sokhranit-dannye-v-fajjl.html)

Katy93 23.10.2021 12:05

Как сохранить данные в файл?
 
В javascript мне нужно сохранить данные в текстовый файл.
Например в php это делается с помощью file_put_contents, который принимает три параметра. Если например записать вот так.
file_put_contents('file.txt', 'text', FILE_APPEND);

1. Файл который создается
2. Параметр который нужно записать в файл
3. FILE_APPEND - дописывает данные в конец файла если он сушествует. Без этого флага, файл будет перезаписываться, стирая последние изменения.

Как сохранить данные в файл и чтобы можно было добавлять новые данные? Существует аналог из php file_put_contents?

Aetae 23.10.2021 12:20

Katy93, в каком javascript?
Серверном на Node.js?
Клиентском в браузере рандомного посетителя вашего сайта?

Если второе - то, очевидно, никак. Вы не имеете право трогать жёсткий диск клиента. Вы только можете предложить клиенту сохранить файл, а он может и отказаться.
Для этого используется Blob, URL.createObjectURL и <a href="<url>" download="<name>">.

Если первое - то для работы с файловой ситсемой есть встроенная библиотека fs. Запись файла, соответственно, fs.writeFile.

voraa 23.10.2021 12:26

Javascript в браузере не имеет доступа к файловой системе.
Единственный способ что то сохранить - это выполнить "загрузку" через элемент <a> При этом появится стандартное диалоговое окно выбора файла, куда записать. Дописывать естественно нельзя.

В Node.js конечно есть возможности записи в файл.

Katy93 23.10.2021 16:22

Цитата:

Javascript в браузере не имеет доступа к файловой системе.
Единственный способ что то сохранить - это выполнить "загрузку" через элемент <a> При этом появится стандартное диалоговое окно выбора файла, куда записать. Дописывать естественно нельзя.

В Node.js конечно есть возможности записи в файл.
Ладно через ajax все сделаю.

Aetae 23.10.2021 16:35

Казвалось бы при чём тут ajax?..

voraa, похоже мы с тобой не угадали, и сохранить файл надо было с клиента на сервере. :lol:

voraa 23.10.2021 16:36

А при чем тут ajax?
Он не поможет загружать в произвольный файл и дописывать туда.
А если устраивает вариант, что каждый раз запрашивается имя файла, то можно без всякого ajax, через блобы и <a>

<body>
<textarea id=txt rows=5" cols=25></textarea>
<br>
<button type=button id=sf>Save</button>

<script>
function textToFile (text, name) {
	const b = new Blob([text], { type: 'text/plain' });
	const url = window.URL.createObjectURL(b);
	const a = document.createElement('a');
	a.href = url;
	a.download = name || 'text.txt';
	a.type = 'text/plain';
	a.addEventListener('click', () => {
		setTimeout(() => window.URL.revokeObjectURL(url), 10000);
	})
	a.click()
}

document.getElementById('sf').addEventListener('click', () => {
	textToFile (document.getElementById('txt').value, 'file.txt')
})
</script>

<body>

Alexandroppolus 23.10.2021 18:02

voraa,
Зачем тут нужен a.addEventListener('click'..?
Неужели сетТаймаута недостаточно?

Katy93 25.10.2021 20:29

voraa,
Цитата:

А при чем тут ajax?
Отправлю данные на сервер в файл php и там запишу их в file_put_contents с флагом FILE_APPEND. При повторном вызове кода, файл будет дописываться. Я так уже сделала, работает.

voraa 25.10.2021 22:57

Тогда вопрос совсем не понятен
Цитата:

Сообщение от Katy93
В javascript мне нужно сохранить данные в текстовый файл.
Например в php это делается с помощью file_put_contents, который принимает три параметра. Если например записать вот так.
file_put_contents('file.txt', 'text', FILE_APPEND);

Если на сервере php, и сохранять надо на сервере то при чем тут javascript?


Часовой пояс GMT +3, время: 15:58.