1. 应用场景
通常用在以文件的形式下载大量数据。
2. 写法举例
@RestController
public class ExampleController
{
@ApiOperation("下载资源文件")
@ApiImplicitParams({
@ApiImplicitParam(name="id" , value="资源标识" , dataTypeClass=String.class , required = true) ,
@ApiImplicitParam(name="fileName" , value="下载下来的文件的文件名" , dataTypeClass=String.class , required = true)
})
@GetMapping(value="/resource/_download" , produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void downloadResource(@RequestParam("id") String aId
, @RequestParam("fileName") String aFileName
, HttpServletResponse aResponse) throws IOException, DocumentException
{
InputStream ins = xxxx ; //获取资源
aResponse.setHeader("content-type", "application/octet-stream");
aResponse.setContentType("application/octet-stream");
aResponse.setHeader("Content-Disposition", "attachment;filename=" + aFileName);
// 输出数据
StreamAssist.transfer_1(ins , aResponse.getOutputStream());
}
}
3. 扩展
如果被下载的资源满足以下条件,则可以先将数据写到Temp File,然后返回TempFile。
- 存在短时间内被重复获取的可能性;
- 且资源在这段时间内几乎不变;
- 资源的查询组织会消耗比较多的资源。