首页 > 解决方案 > 在 Spring MVC 的过程中下载文件失败

问题描述

我在 Spring MVC 控制器中有一个端点,允许用户在我仍在服务器上处理必要数据的同时开始下载文件。端点如下所示:

@GetMapping(value = "/download.csv")
public void download(HttpServletResponse response) {
    try {
        response.setContentType(APPLICATION_OCTET_STREAM);
        response.addHeader("Content-Disposition", "attachment; filename=name.csv");
        final List listOfIds = getListOfIds();
        for (id in ids) {
            final String data = getAdditionalData(id)
            write(data, response.getOutputStream())
            response.flushBuffer()
        }
    } catch (Exception ex) {
       // handle error
    }
}

此代码工作正常,当用户访问下载端点时,Web 浏览器将立即询问用户是否要保存文件。然后我可以在用户下载期间处理服务器上昂贵的getAdditionalData(id)调用,而不是让用户等到我处理完所有ids可能需要很长时间的调用。

但是,有一个问题:当getAdditionalData(id)失败并抛出异常时,Web 浏览器会将下载显示为“完成”而不是“失败”,并将部分结果留给用户。

我的问题是:有没有办法从这个端点告诉网络浏览器下载失败,所以它不会向用户显示“完成”?谢谢。

标签: javaspringspring-mvc

解决方案


推荐阅读