Я начинающий программист среднего уровня, использующий AJAX. Читая о JavaScript, мне показалось любопытным, что большинство примеров, которые я рисовал, используют PHP для такой операции. Я знаю, что многие из вас могут возразить, что «я делаю это неправильно» или «JavaScript - это клиентский язык» и т. д., Но вопрос остается в силе. . . можете ли вы написать файл только на JavaScript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Да, конечно ты можешь. Это просто зависит от того, какие объекты API предоставляет вам ваш движок javascript.
Однако есть вероятность, что движок javascript, о котором вы думаете, не предоставляет такой возможности. Определенно, ни один из основных веб-браузеров не позволит этого.
Нет, Javascript вообще не разрешен доступ к файловой системе, это ограничение безопасности в браузере. Единственный способ, которым вы действительно можете это сделать, - это ActiveX, но затем вы ограничиваетесь использованием IE.
Редактировать: Как указано в приведенном выше сообщении, это могло бы быть возможным, если бы ваш движок позволял это, однако я не знаю ни одного движка браузера (для которого, я думаю, вы его пишете), который позволил бы вам это сделать.
Здесь мы говорим о Javascript, а не о Java, и наиболее распространенные способы сделать то, что он просит, - это activeX, что ограничивает вас IE.
Почему ActiveX больше «JavaScript», чем Java? Вы просто встраиваете дополнительный объект в свой HTML-файл и позволяете JavaScript использовать его в качестве помощника.
Нет. Вы можете использовать JavaScript для создания запроса AJAX к сценарию обработки на стороне сервера, но разрешение JS напрямую записывать на диск - на стороне клиента или на стороне сервера - было бы огромной, неприятной, явной и непростительной дырой в безопасности браузера .
Вы можете писать файлы cookie с помощью Javascript, в новых браузерах у вас также есть база данных SQLite для хранения данных на стороне клиента. Однако вы не можете хранить данные в произвольном месте на диске.
Вы можете использовать что-то вроде Google Gears для создания JS-приложений, которые могут хранить данные в локальном кеше или базе данных. Однако вы не можете читать или записывать произвольные области диска. (это было написано в 2009 году - Google Gears больше не поддерживается)
В наши дни вам стоит обратить внимание на возможности локального хранилища, предоставляемые HTML5
Короткий ответ - нет; по умолчанию вы не можете записать файл на локальный диск с помощью обычного JavaScript в браузере. Для этого вам понадобится помощник. Например, TiddlyWiki - это вики-движок, представляющий собой всего лишь один статический HTML-файл, но он может записывать себя на диск с помощью Java-апплета (Tiddly Saver).
Вы можете в Windows Scripting Host.
Следующая версия chrome (v52) сделала это возможным с помощью fetch api + service worker + streams, теперь вы можете включить потоки с помощью флага ...
вы можете перейти к StreamSaver.js, чтобы увидеть несколько примеров того, как его использовать.
Вы можете сделать что-то вроде этого:
const writeStream = fs.createWriteStream('filename.txt')
const encoder = new TextEncoder
let data = 'a'.repeat(1024)
let uint8array = encoder.encode(data + "\n\n")
writeStream.write(uint8array)
writeStream.close()
Или просто посмотрите демо: https://jimmywarting.github.io/StreamSaver.js/example.html
Если вам просто нужно разрешить пользователю загружать файл (.txt, .csv, образы и другие) через диалог загрузки браузера, вы можете использовать URI данных с тегом <a href=... download=.../>.
Например (для текстового файла):
<a href = "data:text/plain;charset=utf-8,TEXT_HERE" download = "filename.txt"> Click to download </a>
Вы также можете установить атрибут href и download с помощью javascript и использовать element.click() для запуска загрузки.
Однако этот метод не может записать файл без подтверждения пользователем диалогового окна загрузки файла.
ActiveX - не единственный способ. Вы можете использовать Java, не ограничиваясь только IE.