Spring Rest 和 jQuery Ajax 文件下载

2024-02-19

我目前正在使用 jQuery 和 Spring Rest。 jQuery 用于向服务器上传和下载文件。上传过程工作正常,但下载文件时没有什么问题。所以场景是,在视图中,用户将选择n个要下载的文件并单击下载按钮。一旦用户单击该按钮,文件就会被下载。我不想为每个文件下载打开一个新选项卡。我想在同一窗口上下载而不刷新当前视图。我调查了this https://stackoverflow.com/questions/6722716/how-to-download-file-from-server-using-jquery-ajax-and-spring-mvc-3但对我帮助不大。有什么办法,我可以实现这个目标吗?


这是我下载文件的解决方案:

弹簧控制器方法:

@RequestMapping(value = "/download", method = RequestMethod.GET)
public void retrieveDocument(@RequestParam("id") String id, HttpServletResponse response) throws IOException {
    InputStream in = fileService.getFileStream(); // My service to get the stream.
    response.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    response.setHeader("Content-Transfer-Encoding", "binary");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename);
    try {
        IOUtils.copy(inputStream, response.getOuputStream()); //Apache commons IO.
        inputStream.close();
        response.flushBuffer();
        response.setStatus(HttpServletResponse.SC_OK);
    } catch (Exception e) {
        //log error.
    }

}

在客户端功能:

function download(id) {
    var id = $('#file').attr('id')
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'url here' + id, true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function() {
        if(this.status == '200') {
           var filename = '';
           //get the filename from the header.
           var disposition = xhr.getResponseHeader('Content-Disposition');
           if (disposition && disposition.indexOf('attachment') !== -1) {
               var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
               var matches = filenameRegex.exec(disposition);
               if (matches !== null && matches[1])
                   filename = matches[1].replace(/['"]/g, '');
           }
           var type = xhr.getResponseHeader('Content-Type');
           var blob = new Blob([this.response],  {type: type});
           //workaround for IE
           if(typeof window.navigator.msSaveBlob != 'undefined') {
               window.navigator.msSaveBlob(blob, filename);
           }
           else {
               var URL = window.URL || window.webkitURL;
               var download_URL = URL.createObjectURL(blob);
               if(filename) {
                   var a_link = document.createElement('a');
                   if(typeof a_link.download == 'undefined') {
                       window.location = download_URL;
                   }else {
                       a_link.href = download_URL;
                       a_link.download = filename;
                       document.body.appendChild(a_link);
                       a_link.click();
                   }
               }else {
                   window.location = download_URL;
               }
               setTimeout(function() {
                   URL.revokeObjectURL(download_URL);
               }, 10000);
           }
        }else {
            alert('error')';//do something...
        }
    }; 
    xhr.setRequestHeader('Content-type', 'application/*');
    xhr.send();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Rest 和 jQuery Ajax 文件下载 的相关文章

随机推荐

  • HTML SRC 属性 - 使用 html 代码而不是 URL

    有没有办法使用纯 html 代码在框架内显示 而不必链接到特定的 URL 文件 例如 不是这样的 但就像这样 也许您可以将 HTML 注入 iFrame Frame 中 如本文所述 将 HTML 注入 IFrame http softwar
  • 如果兄弟节点具有特定值,如何使用 XPath 选择节点?

    我有以下文件 a a
  • 执行控制台命令并获取其输出

    我想知道 在 Visual Basic 2008 中 如何执行外部控制台 命令行 命令并在没有中间文件的帮助下获取其输出 以加快速度 看一下ProcessStartInfo RedirectStandardOutput http msdn
  • Android KeyStore - 密钥并不总是持久存在

    在我的应用程序中 我们使用 RSA 密钥 该密钥是应用程序在第一次启动时生成的 使用 Android 密钥存储 由于未知原因 应用程序无法从某些设备上的密钥存储中检索密钥 我检查了日志 但找不到此错误与特定操作系统版本或特定设备型号之间的关
  • 有谁知道 pymongo 中 2dsphere 索引的工作示例吗?

    我正在尝试编写一个脚本来执行此处提到的基本 2dsphere 索引操作2dsphere http docs mongodb org manual core 2dsphere 使用 pymongo 我找不到任何例子来弄清楚 这是我迄今为止的尝
  • OleDbDataAdapter Fill 和 OleDbDataReader 需要 3-5 分钟来填充

    这是一个非常奇怪的问题 因为它只发生在随机的全新 Windows 10 电脑上 填充数据适配器或数据读取器需要 1 5 分钟 这是从 Windows 7 旧电脑升级到全新 Windows 10 电脑时发生的第三台电脑 第一次出现是在一年前
  • JSON 导入到 Excel

    是否可以在宏中编写 JSON 调用脚本 我想通过 API 连接获取 JSON 字符串 看起来问题是 Excel 期望参数在 HTML 字符串中传递 但 JSON 在 HTML 正文中传递参数 有任何想法吗 由于这是VBA 我会使用COM来调
  • 未为我的带有 Firebase 动态链接的网站设置 UTM 参数

    我需要缩短我的网站网址 我选择 Firebase 动态链接 https firebase google com docs dynamic links https firebase google com docs dynamic links
  • java.lang.ClassCastException,通过 JNDI 查找获取 Entitymanager

    我是 JPA 新手 正在开发一个 web 应用程序 J2EE 其中该 web 应用程序位于 Tomcat 中 所以我无法使用 PersistenceContext 我决定使用 Helper 类 一切都很顺利 然后我决定实现 JNDI 进行连
  • 实施 Izhikevich 神经元模型

    我正在尝试实现 Izhikevich 模型的尖峰神经元 这种类型神经元的公式非常简单 v n 1 0 04 v n 2 5 v n 140 u n I u n 1 a b v n u n 其中 v 是膜电位 u 是恢复变量 If v超过 3
  • ng-repeat 排序在 jQuery 中抛出异常

    我有一个表 其中包含由 ng repeat 创建的行 表头有一个 ng click 用于设置排序谓词 该函数还确定方向 asc desc 排序工作正常 但由于某种原因 每次更改谓词并且排序触发时 我都会收到 jQuery 的异常 这是我正在
  • 从 SFSpeechRecognizer 获取语音幅度

    我正在使用这个库https github com appcoda SpeechToTextDemo https github com appcoda SpeechToTextDemo将语音转录为文本 我想要真实的语音幅度来显示这个库的语音图
  • iOS 9 点播资源可以永久保留吗?

    根据文档 iOS 9 通过 NSBundleResourceRequest 下载的按需资源仅保留到endAccessingResources被调用 并且被自动调用当资源请求对象被释放时 好的 但是当应用程序终止时 一切被解除分配 那么这是否
  • 在 GitHub 上拥有公共存储库的私有分支吗?

    我在 GitHub 存储库中有一个公共 PHP 项目 其中仅包含一个分支 主分支 我想要一个对我来说是私有的单独分支 分支 我已经为私有 GitHub 存储库付费 我希望能够将私人分支 分叉的更改合并到公共存储库 反之亦然 考虑到这一点 我
  • 在delphi 2009中创建gif动画文件?

    gif TgifImage Create gif Width 100 gif Height 100 gif AnimationSpeed 500 gif Animate true gif add image1 Picture Bitmap
  • Laravel:PDO异常,即使安装并测试了驱动程序也找不到驱动程序[重复]

    这个问题在这里已经有答案了 我正在开发一个 Laravel 5 1 项目 该项目必须连接到现有的 MS SQL Server 数据库 我的项目当前位于使用 Apache 2 4 18 的 Ubuntu 16 04 LTS 服务器上 我已在计
  • 什么时候发送HTTP状态码?

    目前 在我的 PHP 脚本中 当用户尝试访问不存在或不属于该用户的内容时 我会将用户重定向到自定义 404 未找到错误页面 就像这样 header Location http www mydomain com error notfound
  • 文件引用与文件?

    我想制作一个 Flash 应用程序 用户可以在其中从本地硬盘驱动器加载文件并将文件保存到本地硬盘驱动器 虽然我经常在 AIR 应用程序中使用File and FileStream类 我以前没有在 SWF 中这样做过 据我所知FileRefe
  • 使用“get”来访问地图有什么好处

    从这个问题跟进 按关键字进行惯用的 clojure 映射查找 https stackoverflow com questions 7034803 idiomatic clojure map lookup by keyword 使用 cloj
  • Spring Rest 和 jQuery Ajax 文件下载

    我目前正在使用 jQuery 和 Spring Rest jQuery 用于向服务器上传和下载文件 上传过程工作正常 但下载文件时没有什么问题 所以场景是 在视图中 用户将选择n个要下载的文件并单击下载按钮 一旦用户单击该按钮 文件就会被下