Загрузить файл на основе выбранного объекта в EJS - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь загрузить файл на основе объекта Select на моей веб-странице.Я позаботился о бэкэнде, но у меня проблемы с получением файла для загрузки.Я использую URL, чтобы сообщить бэкэнду, какие данные возвращать.Мой оригинальный HTML-код выглядит следующим образом:

<select id="emailListType" class="selectList rpt-status-item" style="display:inline-block">
    <option value="confirmed" selected>Confirmed Emails Only</option>
    <option value="unconfirmed">Unconfirmed Emails Only</option>
    <option value="all">All Emails That We Have</option>
</select>
<button class="rpt-status-item" onclick="generateEmailCSV()">Generate CSV File</button>

, где вызывается функция:

function generateEmailCSV() {
    // Get the data from the server and fill it in
    var url = "/alumni/reports/emails/" + $('#emailListType').val();
    $.get(url)
    .done(function(data) {
        $('#emailCsvHdr').text('The file should be downloaded.').val();
    })
    .fail(function() {
        console.log("Message post error");
    });
}

Как мне указать, что файл должен быть загружен так, как если бы он был загруженв теге привязки?

1 Ответ

0 голосов
/ 12 июня 2018

Заимствование из ответа owencm здесь.

Решение состоит в том, чтобы вставить ваш возвращенный URL-адрес в пользовательскую функцию, которая создает, а затем вызывает ссылку (на URL вашего файла).

function downloadURI(uri, name) {
    var link = document.createElement("a");
    link.download = name;
    link.href = uri;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    delete link;
}

А затем назовите это в своем .done с помощью:

downloadURI(uri, filename);
...