java - rest api 下载文件返回文件内容作为响应而不下载它
问题描述
@GET
@Path("/{loginId}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadExportedFile(@PathParam("loginId") String loginId) {
File file = new File("D://abc.txt");
Response.ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=newfile.txt");
response.type(MediaType.APPLICATION_OCTET_STREAM_TYPE);
return response.build();
}
这将响应作为文件内容而不是下载它
解决方案
Monika 如果你使用 spring,我建议返回响应实体资源,标题如下
@GetMapping("/api/config)
fun config(@PathVariable id: String): ResponseEntity<Resource> {
val config = someService.getConfig(hotelId = id)
val resource InputStreamResource(objectMapper.writeValueAsString(config)
.byteInputStream(Charsets.UTF_8))
val responseHeaders = HttpHeaders()
responseHeaders.add("content-disposition",
"attachment;filename=config.json")
responseHeaders.add("Content-Type",MediaType.APPLICATION_OCTET_STREAM_VALUE)
return ResponseEntity.ok()
.headers(responseHeaders)
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource)
}
在这里,您还有其他一些答案
前端不应该对下载文件有影响。
推荐阅读
- angular - 在 Apollo Angular 中使用新的身份验证令牌重试失败的 graphql 请求
- javascript - toLocaleString 给出错误的 12 小时时间
- python - 在第一个“或”的 Vs Code 中出现无效的语法错误
- python-3.x - 无法将情节发送到 http://127.0.0.1:63342
- postgresql - 如何在PostgreSQL的where子句中传递多个参数
- angular - Firebase 分别为每个产品设置新数据
- javascript - 谁能解释下面程序中的javascript代码?
- html - Chrome 开发者工具没有显示响应
- java - manjaro 中的 VScode 无法识别已安装的 jdk
- reactjs - 替换 Query 对象的 my 字段时可能会丢失缓存数据