在controller接口入参直接传HttpServletResponse
response,然后设置文件名称(fileName)和需要下载的文件类型(contentType),inputStream是要下载的文件流,无论是网络文件还是存储在阿里OSS或者腾讯COS静态存储服务中的文件,都可以转化成InputStream的形式。
@GetMapping("/download")
public void download(HttpServletResponse response) {
return this.downloadFile(response);
}
public void downloadFile(HttpServletResponse response, InputStream inputStream, String fileName, String contentType) {
try (BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream())) {
//通知浏览器以附件形式下载
response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", fileName));
//文件输出格式
response.setContentType(contentType);
byte[] car = new byte[1024];
int len;
while ((len = inputStream.read(car)) != -1) {
out.write(car, 0, len);
}
} catch (IOException e) {
log.error("Method:downloadFile,ErrorMsg:{}", e.getMessage());
}
}
启动本地服务,把该接口链接url复制在浏览器上,点击回车,就可以看到下载效果了。如果在postman上测试,则需要在以下界面点下载按钮:
以上方法亲测有效,如果对你有帮助帮忙点个赞吧!