Эмуляция скачивания файла на JS - можно ли?
От: удусекшл  
Дата: 26.01.22 15:55
Оценка: :)
Привет!

Такой вопрос. Я хочу добавить на страничку кнопку, покоторой генерится некоторый контент, который бы хорошо бы сохранить в файл. Можно, конечно, просто скопировать в буфер, а пользователь пусть сам создаёт файл, и пастит туда, но это неудобно. Хотелось бы, чтобы сразу открывалось окошко сохранения файла с заданным именем файла, чтобы пользователь просто выбрал путь, куда сохранять. Такое можно как-то сделать?
Re: Эмуляция скачивания файла на JS - можно ли?
От: sergeya Ниоткуда http://blogtani.ru
Дата: 26.01.22 16:02
Оценка: 9 (2) +1
У>Такой вопрос. Я хочу добавить на страничку кнопку, покоторой генерится некоторый контент, который бы хорошо бы сохранить в файл. Можно, конечно, просто скопировать в буфер, а пользователь пусть сам создаёт файл, и пастит туда, но это неудобно. Хотелось бы, чтобы сразу открывалось окошко сохранения файла с заданным именем файла, чтобы пользователь просто выбрал путь, куда сохранять. Такое можно как-то сделать?

Думаю, что download.js — это то, что тебе нужно.

https://github.com/rndme/download

The input can be a URL, String, Blob, or Typed Array of data, or via a dataURL representing the file's data as base64 or url-encoded string. No matter the input format, download() saves a file using the specified file name and mime information in the same manner as a server using a Content-Disposition HTTP header.

Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re: Эмуляция скачивания файла на JS - можно ли?
От: bnk СССР http://unmanagedvisio.com/
Дата: 26.01.22 16:20
Оценка: 10 (3) +3
Здравствуйте, удусекшл, Вы писали:

У>Привет!


У>Такой вопрос. Я хочу добавить на страничку кнопку, покоторой генерится некоторый контент, который бы хорошо бы сохранить в файл. Можно, конечно, просто скопировать в буфер, а пользователь пусть сам создаёт файл, и пастит туда, но это неудобно. Хотелось бы, чтобы сразу открывалось окошко сохранения файла с заданным именем файла, чтобы пользователь просто выбрал путь, куда сохранять. Такое можно как-то сделать?


Если по минимуму без download.js, гуглится на stackoverflow:
var text = "Hello world!"
var blob = new Blob([text], {type: "text/plain"});
var a = document.createElement("a");
a.href = window.URL.createObjectURL(blob);
a.download = "Hello.txt";
a.click();
Re[2]: Эмуляция скачивания файла на JS - можно ли?
От: удусекшл  
Дата: 28.01.22 15:35
Оценка:
Здравствуйте, sergeya, Вы писали:

S>Думаю, что download.js — это то, что тебе нужно.


S>https://github.com/rndme/download


Похоже на то.


Fixed — разобрался. Таки скрипт не грузился, и в этом и была проблема.

Но оно сразу начинает скачку, а я хочу, чтобы диалог "Save As" открылся, куда сохранять
Отредактировано 28.01.2022 15:41 удусекшл . Предыдущая версия .
Re[3]: Эмуляция скачивания файла на JS - можно ли?
От: bnk СССР http://unmanagedvisio.com/
Дата: 28.01.22 17:55
Оценка: 3 (1)
Здравствуйте, удусекшл, Вы писали:

У>Но оно сразу начинает скачку, а я хочу, чтобы диалог "Save As" открылся, куда сохранять


Можно через File System API

  <script>
    async function save() {

      const fileHandle  = await window.showSaveFilePicker({ suggestedName: "Hello.txt" });
      const writableStream = await fileHandle.createWritable();

      const text = "Hello world!";
      const blob = new Blob([text], {type: "text/plain"});

      await writableStream.write(blob);
      await writableStream.close();
    }
  </script>

   <button onClick="save()" >save</button>

В Firefox не заведется, в хроме (и Edge понятно) должно.
Отредактировано 28.01.2022 17:59 bnk . Предыдущая версия .
Re[4]: Эмуляция скачивания файла на JS - можно ли?
От: удусекшл  
Дата: 02.02.22 16:19
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>В Firefox не заведется, в хроме (и Edge понятно) должно.


В хроме работало, пока страничка с диска открывалась. Загрузил на сервак — не работает.
Нагуглил: "Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers"

Блин, так хорошо всё работало, а тут такой облом
Re[5]: Эмуляция скачивания файла на JS - можно ли?
От: bnk СССР http://unmanagedvisio.com/
Дата: 02.02.22 16:25
Оценка:
Здравствуйте, удусекшл, Вы писали:

У>В хроме работало, пока страничка с диска открывалась. Загрузил на сервак — не работает.

У>Нагуглил: "Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers"

А у тебя сервак без HTTPS что ли? Вроде таких уже не осталось
Тем более файлы передаешь, вдруг враги подсмотрят что у тебя в них?

Почему не включишь HTTPS?
Отредактировано 02.02.2022 16:27 bnk . Предыдущая версия .
Re[6]: Эмуляция скачивания файла на JS - можно ли?
От: удусекшл  
Дата: 02.02.22 16:40
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>А у тебя сервак без HTTPS что ли? Вроде таких уже не осталось

bnk>Тем более файлы передаешь, вдруг враги подсмотрят что у тебя в них?

bnk>Почему не включишь HTTPS?


Это локальный сервис внутри конторы, и я не настоящий сварщикадмин.
Это вообще сервак нашего подразделения, и те, кто им рулил, давно поувольнялись. А ИТ отдел, который инфраструктурой занимается, наверно и не знает вообще, что это за сервак и где он стоит

ЗЫ Вроде в ИИСе сделал серт какой-то, самоподписанный, назначил сайту, но чет ругается всё равно, хотя https заработал
Re[7]: Эмуляция скачивания файла на JS - можно ли?
От: bnk СССР http://unmanagedvisio.com/
Дата: 02.02.22 18:13
Оценка: +1
Здравствуйте, удусекшл, Вы писали:

У>ЗЫ Вроде в ИИСе сделал серт какой-то, самоподписанный, назначил сайту, но чет ругается всё равно, хотя https заработал


Не, на самоподписанный хром будет ругаться.
Чтобы не ругался, если винда, можно самоподписанный в доверенные добавить ("trusted root").

Ну или сделать нормальный letsencrypt (бесплатно, но с смс и регистрацией)
Отредактировано 02.02.2022 18:15 bnk . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.