【问题标题】:Javascript method to download generated file without replacing the url无需替换 url 即可下载生成文件的 Javascript 方法
【发布时间】:2017-11-17 11:37:34
【问题描述】:

当用户从同一表单的文本区域中显示的查询中单击 Download 时,我正在生成一个文本和 sql 文件。我已经编写了以下代码。但问题是,URL 正在被替换,下载后整个页面会自动刷新。因此,将无法继续进行操作。

Javascript 方法

function download() {
      var element = document.createElement('a');
      var filename = document.getElementById("filenameInput").value;
      var text = document.getElementById("runquerytext").value;
      element.setAttribute('href', 'data:text/plain;charset=utf-8,' + text);
      element.setAttribute('download', filename);

      element.style.display = 'none';
      document.body.appendChild(element);

      element.click();

      document.body.removeChild(element);
}

任何关于如何在不重新加载/更改 uri 的情况下下载生成的文件的建议将不胜感激。

【问题讨论】:

    标签: javascript file url download reload


    【解决方案1】:

    如果您希望某人在不刷新页面的情况下下载文件,我建议您使用 iframe。该页面正在重定向,因为“a”标签在单击该页面时会重定向该页面。因此,要解决使用 javascript 或图像标记生成动态 iframe 标记的问题。例如:

        function download() {
         var element = document.createElement('iframe');
         var filename = document.getElementById("filenameInput").value;
         var text = document.getElementById("runquerytext").value;
         element.setAttribute('src', 'data:application/octet-stream;charset=utf-8,' + text);
         element.setAttribute('download', filename);
         element.style.display = 'none';
         document.body.appendChild(element);
        }
    

    【讨论】:

    • 这是否允许用户在不刷新/替换 url 的情况下下载文件?
    • 我将代码修改为element.setAttribute('href', 'data:application/octet-stream' + text);,但是url被替换为http://localhost:8080/controllers/veditor?filenameInput=me.txt&filetype-combo=1&downloadFileBtn=,整个页面都被刷新了。
    • 为什么不在图像标签内做呢?像 或将其加载到 iframe 中?那会有帮助吗?是的,这会刷新页面,因为您正在创建指向该文件的链接。不要放链接,使用不可见的 iframe 或 img 标签
    • 既然表单是在运行时使用js动态生成的,那么究竟如何使用img标签呢?
    • 函数任何东西(){ var a = document.createElement("img"); a.setAttribute("src", "data:application/octet-stream,data"); // 附加一个地方做某事 }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2020-02-05
    • 2017-07-28
    • 2021-08-05
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多