首页 > 解决方案 > 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();
        }

这将响应作为文件内容而不是下载它

标签: javarestfiledownload

解决方案


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)
}

在这里,您还有其他一些答案

内容处置和内容类型

前端不应该对下载文件有影响。


推荐阅读