Спросите пользователя, где сохранить файл с Node.js
Я создаю приложение с использованием node-webkit, поэтому в нем много javascript. Я написал функцию node.js, которая сделает снимок экрана и сохранит его на диск, однако он сохраняет его в корневом каталоге проекта, и я хотел бы предложить пользователю выбрать место для сохранения, но я не могу найти способ создать диалог сохранения файла. Текущий код:
screen_shot.js:
var fs = require('fs');
exports.buildFile = function(name, value) {
var img = new Buffer(value, encoding='base64');
fs.writeFile(name, img, function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
};
index.html:
...
<script>
var sc= require('screen_shot');
function wait() {
$('#close-popup').click();
setTimeout(function() {screen_shot()}, 10);
}
function screen_shot() {
html2canvas($('body'), {
onrendered: function(canvas) {
var img = canvas.toDataURL("image/png").split(',')[1];
var decodedImg = window.atob(img);
sc.buildFile("sc.png", img);
}
});
}
</script>
...
<a href="#" onclick="wait();" data-role="button" data-theme="j">Screen shot</a>
Функция ожидания предназначена только для того, чтобы всплывающее окно, которое я использую, закрывалось до того, как сделан снимок экрана.
Я читал документацию по файлу node-webkit, но это не то, что мне нужно, или я не могу заставить его работать должным образом.
2 ответа
На странице "Диалог файлов" в вики упоминается ввод файла диалога сохранения
nwsaveas откроет диалоговое окно сохранения как, которое позволяет пользователю ввести путь к файлу, и можно выбрать несуществующий файл, который отличается от тега ввода файла по умолчанию:
Вы можете использовать это в пользовательском диалоге, таком как модальный или около того, чтобы запросить у пользователя этот ввод.
Очень простой пример, основанный на предоставленном вами коде:
<script>
var fs = require('fs');
var buildFile = function(name, value) {
var img = new Buffer(value, 'base64');
fs.writeFile(name, img, function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
}
function wait() {
$('#close-popup').click();
setTimeout(function() {screen_shot()}, 10);
}
function screen_shot() {
html2canvas($('body'), {
onrendered: function(canvas) {
var img = canvas.toDataURL("image/png").split(',')[1];
var decodedImg = window.atob(img);
query_for_save_path(function (save_path) {
buildFile(save_path, img);
alert('Screenshot saved to: ' + save_path);
});
}
});
}
function query_for_save_path(cb) {
$('#dialog').show();
$('#dialog input').one('change', function (event) {
cb($(this).val());
});
}
</script>
<a href="#" onclick="wait();" data-role="button" data-theme="j">Screen shot</a>
<div id="dialog" style="display:none;">
Choose a path to save your shot:
<input type="file" nwsaveas />
</div>
Другой пример здесь http://9ijy.net/blog/view/6, всего 3 шага, чтобы сохранить файл там, где вам нравится. надеюсь, что это ответ, который вы хотите, а также на странице диалога файлов в вики упоминается, что ввод диалогового окна сохранения файла очень полезен