Как создать и скачать файл XML на лету, используя JavaScript? - PullRequest
3 голосов
/ 28 февраля 2011

Я получил следующее требование:

На веб-странице есть ссылка.Когда пользователь нажимает на ссылку, он должен создать файл на лету, и появится окно загрузки.Как это сделать с помощью сценария Java?

Ответы [ 4 ]

16 голосов
/ 12 июня 2014

Вы можете использовать BLOB-объекты, как показано в этом примере http://html5 -demos.appspot.com / static / a.download.html

Вы можете использовать функцию javacript со следующимикод

var xmltext = "<sometag><someothertag></someothertag></sometag>";
var pom = document.createElement('a');

var filename = "file.xml";
var pom = document.createElement('a');
var bb = new Blob([xmltext], {type: 'text/plain'});

pom.setAttribute('href', window.URL.createObjectURL(bb));
pom.setAttribute('download', filename);

pom.dataset.downloadurl = ['text/plain', pom.download, pom.href].join(':');
pom.draggable = true; 
pom.classList.add('dragout');

pom.click();
14 голосов
/ 25 мая 2013

После того, как попробуете то, что сказал Андреас, я добавлю кое-что:

Сценарий:

function createAndOpenFile(){
    var stupidExample = '<?xml version="1.0" encoding="utf-8"?><aTag>something</aTag>';
    document.open('data:Application/octet-stream,' + encodeURIComponent(stupidExample));
}

У вас есть такая ссылка, обратите внимание на новый атрибут загрузки , вместе с которым вы добавляете имя файла.

<a href="#" onclick="createAndOpenFile()" download="file.xml">Donwload</a>

Это работает по крайней мере в Chrome 27 и Firefox 21.

Улучшения приветствуются: -)

3 голосов
/ 28 февраля 2011

Вы можете создать data-URI.Большинство современных браузеров должны уметь это понимать.Смотри http://en.wikipedia.org/wiki/Data_URI_scheme

2 голосов
/ 28 февраля 2011

Если пользователь доверяет вам, вы можете создать XML-файл непосредственно в своей файловой системе.Пример кода для Mozilla Firefox:

function mozillaSaveFile(filePath,content)
{
    if(window.Components) {
        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
            file.initWithPath(filePath);
            if(!file.exists())
                file.create(0,0664);
            var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
            out.init(file,0x20|0x02,00004,null);
            out.write(content,content.length);
            out.flush();
            out.close();
            return true;
        } catch(ex) {
            return false;
        }
    }
    return null;
}

, если вам нужна поддержка всех браузеров, посмотрите, как это реализовано в http://www.tiddlywiki.com

РЕДАКТИРОВАТЬ: Это не такработа для Firefox 17 + , потому что изменение привилегий было сочтено небезопасным и удаленным.смотрите здесь для более подробной информации: https://bugzilla.mozilla.org/show_bug.cgi?id=546848#c57

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...