Можно ли записывать в файл (на диск) с помощью JavaScript?

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
13
0
23 883
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Да, конечно ты можешь. Это просто зависит от того, какие объекты API предоставляет вам ваш движок javascript.

Однако есть вероятность, что движок javascript, о котором вы думаете, не предоставляет такой возможности. Определенно, ни один из основных веб-браузеров не позволит этого.

Нет, Javascript вообще не разрешен доступ к файловой системе, это ограничение безопасности в браузере. Единственный способ, которым вы действительно можете это сделать, - это ActiveX, но затем вы ограничиваетесь использованием IE.

Редактировать: Как указано в приведенном выше сообщении, это могло бы быть возможным, если бы ваш движок позволял это, однако я не знаю ни одного движка браузера (для которого, я думаю, вы его пишете), который позволил бы вам это сделать.

ActiveX - не единственный способ. Вы можете использовать Java, не ограничиваясь только IE.

Ates Goral 20.01.2009 18:43

Здесь мы говорим о Javascript, а не о Java, и наиболее распространенные способы сделать то, что он просит, - это activeX, что ограничивает вас IE.

Sam Cogan 20.01.2009 18:44

Почему ActiveX больше «JavaScript», чем Java? Вы просто встраиваете дополнительный объект в свой HTML-файл и позволяете JavaScript использовать его в качестве помощника.

Ates Goral 20.01.2009 19:09

Нет. Вы можете использовать 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() для запуска загрузки.

Однако этот метод не может записать файл без подтверждения пользователем диалогового окна загрузки файла.

Другие вопросы по теме