java - 在 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 浏览器会将下载显示为“完成”而不是“失败”,并将部分结果留给用户。
我的问题是:有没有办法从这个端点告诉网络浏览器下载失败,所以它不会向用户显示“完成”?谢谢。
解决方案
推荐阅读
- literals - 像“2 * 7”这样的操作是否被视为文字?
- powershell - 如何从计算机 OU 中动态移动计算机帐户
- python - 未知层类型:函数 cv::dnn::darknet::ReadDarknetFromCfgFile 中的快捷方式
- java - 如何使用 for 循环将数组中的值相加?
- python - Python中的函数总和
- reactjs - Jest 集成测试通过多个 saga fetch 调用反应组件
- database-design - 两次引用同一个表的表的数据库设计
- asp.net-core - 什么是 ASP.NET Core 静态 Web 资产?
- intellij-idea - 在 Intellij 中禁用所有 svn 自动检查
- swiftui - 如何在 SwiftUI 中使用 ZStack 重现高度/堆叠效果