如何返回InputStreamResource以使其可在Postman中读取并下载?
修复Spring Boot文件下载接口Postman异常问题
以下是针对你的接口的具体调整方案,可解决Postman中无法正常读取和下载的问题:
1. 替换setContentDispositionFormData为标准附件头
setContentDispositionFormData适用于表单数据场景,文件下载需使用标准的附件处置格式,同时指定UTF-8编码避免文件名乱码:
headers.setContentDisposition(ContentDisposition.attachment() .filename(fileId + ".doc", StandardCharsets.UTF_8) .build());
2. 移除冗余的Content-Transfer-Encoding头
该头在HTTP/1.1规范中已不推荐使用,Postman等客户端对其处理存在兼容性问题,直接删除此行代码:
// headers.add("Content-Transfer-Encoding", "binary");
3. 简化ContentType设置
无需额外指定字符集,直接使用APPLICATION_OCTET_STREAM即可:
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
4. 调整后的完整接口代码
@GetMapping( value = "/download/{fileId}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE ) public ResponseEntity<InputStreamResource> download(@Valid @PathVariable(value = "fileId") String fileId) { InputStream inputStream = service.download(fileId); InputStreamResource file = new InputStreamResource(inputStream); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDisposition(ContentDisposition.attachment() .filename(fileId + ".doc", StandardCharsets.UTF_8) .build()); return ResponseEntity.ok() .headers(headers) .body(file); }
5. Postman调用验证
- 调用接口后,Postman会自动识别附件响应,点击界面中的「Save Response」按钮即可下载文件;
- 若仍显示乱码,切换到「Response」标签页的「Raw」模式,将编码选择为
UTF-8。
内容的提问来源于stack exchange,提问作者Lalisa Daniella
相关产品推荐
相关产品推荐

