В моем JavaScript я использую тег <a> с атрибутом загрузки, чтобы пользователь мог загрузить сгенерированный файл. Я могу установить для файла имя по умолчанию, однако пользователь может изменить его перед сохранением в своей системе. Есть ли способ получить имя, написанное пользователем в диалоговом окне сохранения?
Основная причина этого в том, что я могу снова использовать то же имя, что и по умолчанию, когда пользователь снова загружает файл.
Вот код:
var json = JSON.stringify(currentProject, null, '\t');
var a = document.createElement('a');
a.href = URL.createObjectURL(new Blob([json], {type: 'text/json'}));
a.download = currentProjectName;
a.click();
Если это невозможно сделать с помощью метода тегов <a>, я хотел бы узнать о каком-то другом методе загрузки, который позволяет это каким-то образом.



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


Я не думаю, что вы можете сделать это без специального клиента для конечного пользователя, диалог сохранения контролируется ОС, но вы можете предложить пользователю переименовать файл в вашем приложении примерно так: рабочий код на repl.it
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width">
<title>Download</title>
</head>
<body>
<div>
<input type = "text" id = "filename-input" value = "">
<a id = "download" href = "generated-filename.txt" download>Download</a>
</div>
<script>
document.addEventListener('DOMContentLoaded', loadDefaultFilename, false);
function loadDefaultFilename() {
// this could be value from database or cookie
let userDefaultFilename = localStorage.getItem('default-filename') || 'generared-file.txt';
let filenameInput = document.getElementById('filename-input');
let fileDownloadLink = document.getElementById('download');
fileDownloadLink.setAttribute('href', userDefaultFilename)
// load default filename from somewhere, e.g database or cookie
// set the default name
filenameInput.value = userDefaultFilename;
}
let button = document.getElementById('download');
button.addEventListener('click', function(e) {
const defaultFilename = document.getElementById('filename-input').value;
saveDefaultFilename(defaultFilename);
});
function saveDefaultFilename(filename) {
localStorage.setItem('default-filename', filename);
console.info(filename);
}
</script>
</body>
</html>Я советую вам создать тег ввода, где пользователь записывает имя файла, который хочет загрузить, чтобы вы могли поместить его в атрибут загрузки (и "запомнить его"), иначе я надеюсь, что эта ссылка будет полезна вам: