Скачать файл с помощью HTTP POST с использованием GWT

Вот рабочий код для загрузки файла с помощью JSNI:

public static native void downloadPDF(String payload, String form) /*-{
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'http://localhost:8080/template/' + form);
        xhr.responseType = 'blob';
        xhr.send(payload);
        xhr.onload = function(e) {
            if (this.status == 200) {
                var blob = new Blob([this.response], {type: 'image/pdf'});
                var a = document.createElement("a");
                a.style = "display: none";
                document.body.appendChild(a);
                var url = $wnd.window.URL.createObjectURL(blob);
                a.href = url;
                a.download = 'Documo.pdf';
                a.click();
                window.URL.revokeObjectURL(url);
            }else{

            }
        };
    }-*/;

Есть ли способ сделать это на чистой Java (GWT), а не на JSNI?


person quarks    schedule 10.10.2017    source источник
comment
Вы можете попробовать Elemental 2. Это должно сработать.   -  person El Hoss    schedule 10.10.2017
comment
Не удается найти URL.createObjectURL в elemental2   -  person Papick G. Taboada    schedule 24.10.2018


Ответы (1)


Этот вопрос привел меня к тому, чтобы заставить это работать с использованием JSNI. Не вижу необходимости делать в чистом GWT.

Код из вопроса использует XMLHttpRequest, однако, если «полезная нагрузка» уже находится в браузере клиента, ее можно поместить непосредственно в BLOB-объект.

Мое демонстрационное решение: FileDownloadSpike.java

На момент написания:

public static native void download() /*-{
    var blob = new Blob(["Hello World"], {type: 'text/plain'});

    var a = document.createElement("a");
    a.style = "display: none";
    document.body.appendChild(a);
    //Create a DOMString representing the blob
    //and point the link element towards it
    var url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = 'hello-world.txt';
    //programatically click the link to trigger the download
    a.click();
    //release the reference to the file by revoking the Object URL
    window.URL.revokeObjectURL(url);

}-*/;
person Peter L    schedule 02.08.2018