Создать файл с помощью javascript в chrome на стороне клиента
Я хотел бы знать, могу ли я создать текстовый файл и сохранить файл в разделе "Загрузки" пользователей на своем компьютере с помощью javascript. Способ, которым должна работать моя функция, - это когда пользователь нажимает кнопку отправки, я заполняю информацию о пользователях в текстовом файле, а затем сохраняю ее на своем компьютере. Я бы хотел, чтобы это работало в google chrome.
Возможно ли это? Я видел сообщения, которые специально говорят мне, что это серьезная проблема безопасности.
Ответы
Ответ 1
Конечно, вы можете использовать совершенно новые API: http://jsfiddle.net/4D92b/88/.
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
fs.root.getFile('test.bin', {create: true}, function(fileEntry) { // test.bin is filename
fileEntry.createWriter(function(fileWriter) {
var arr = new Uint8Array(3); // data length
arr[0] = 97; // byte data; these are codes for 'abc'
arr[1] = 98;
arr[2] = 99;
var blob = new Blob([arr]);
fileWriter.addEventListener("writeend", function() {
// navigate to file, will download
location.href = fileEntry.toURL();
}, false);
fileWriter.write(blob);
}, function() {});
}, function() {});
}, function() {});
Ответ 2
Введите это в браузер Chrome
data:text;charset=utf-8,helloWorld
Итак, чтобы построить загрузку для ваших пользователей, вы бы сделали что-то вроде
data='<a href='data:text;charset=utf-8,'+uriEncode(yourUSERdataToDownload)+' >Your Download</a>
Затем введите его в dom, чтобы ваш пользователь нажал.
Ответ 3
Попробуйте следующее:
document.body.innerHTML+="<a id='test' href='data:text;charset=utf-8,"+encodeURIComponent("hi")+"'>Your Download</a>";
document.getElementById('test').click();
если вы хотите установить для имени файла атрибут download
тега привязки:
document.body.innerHTML+="<a id='test' href='data:text;charset=utf-8,"+encodeURIComponent("hi")+"' download=yourfilename>Your Download</a>";
document.getElementById('test').click();
Ответ 4
Следующий метод работает в IE11 +, Firefox 25+ и Chrome 30 +:
<a id="export" class="myButton" download="" href="#">export</a>
<script>
function createDownloadLink(anchorSelector, str, fileName){
if(window.navigator.msSaveOrOpenBlob) {
var fileData = [str];
blobObject = new Blob(fileData);
$(anchorSelector).click(function(){
window.navigator.msSaveOrOpenBlob(blobObject, fileName);
});
} else {
var url = "data:text/plain;charset=utf-8," + encodeURIComponent(str);
$(anchorSelector).attr("download", fileName);
$(anchorSelector).attr("href", url);
}
}
$(function () {
var str = "hi,file";
createDownloadLink("#export",str,"file.txt");
});
</script>
Смотрите это в действии: http://jsfiddle.net/Kg7eA/
URI для браузера Firefox и Chrome для навигации, который позволяет нам создавать файлы, перейдя на URI данных, в то время как IE не поддерживает его в целях безопасности.
С другой стороны, IE имеет API для сохранения blob, который можно использовать для создания и загрузки файлов.
Ответ 5
Нет, поскольку это позволит вам создавать вредоносные программы на клиентском компьютере и наносить вред его конфиденциальности.
Кроме того, запросы на загрузку файлов поступают с сервера, поэтому вам нужно будет создать файл на сервере и подать его пользователю, и надеемся, что он его сохранит (если он попросит об этом, вероятно, что он будет).
Еще одно возможное решение - использовать URI данных или CSV, но поддержка браузера для них неполна (IE), см. Создать файл в памяти для загрузки пользователем, а не через сервер
Ответ 6
Вам понадобится функциональность на стороне сервера, чтобы сервер пользователя текстового файла (javascript недостаточно).
Вы можете создать серверную сторону script, которая создает файл и использует javascript, чтобы предложить пользователю его сохранить.
Ответ 7
В режиме "Отправить" от пользователя вы можете создать файл на сервере и перенаправить пользователя на URL-адрес файла, откуда он должен автоматически загружаться.
Ответ 8
var isIE = /*@[email protected]*/ false || !! document.documentMode; // At least IE6
var uri = "some data"; //data in file
var fileName = "file.i4cvf"; // any file name with any extension
if (isIE) {
var fileData = ['\ufeff' + uri];
var blobObject = new Blob(fileData);
window.navigator.msSaveOrOpenBlob(blobObject, fileName);
} else //chrome
{
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 1024 * 1024, function (fs) {
fs.root.getFile(fileName, {
create: true
}, function (fileEntry) {
fileEntry.createWriter(function (fileWriter) {
var fileData = ['\ufeff' + uri];
var blob = new Blob(fileData);
fileWriter.addEventListener("writeend", function () {
var fileUrl = fileEntry.toURL();
var link = document.createElement('a');
link.href = fileUrl;
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}, false);
fileWriter.write(blob);
}, function () {});
}, function () {});
}, function () {});
}