猿创征文|Java下载文件到本地目录(弹框选择)
Posted 小花皮猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猿创征文|Java下载文件到本地目录(弹框选择)相关的知识,希望对你有一定的参考价值。
需求
提供一个接口,前端通过按钮下载文件,根据不同的id下载对应的文件
编写接口相关代码
controller
/**
* 下载文件
*
* @param signId
*/
@GetMapping("/downloadFile")
@ApiOperationSupport(order = 5)
@ApiOperation(value = "下载文档", notes = "传入signId")
public void downloadFile(@ApiParam(value = "签署id", required = true) @RequestParam Long signId, HttpServletResponse response) throws Exception
signDocumentService.downloadFile(signId,response);
mapper
/**
* 根据singId查询Attach
*
* @param singId
* @return SignDocument
*/
List<Map<String, String>> selectAttachs(@Param("singId") Long singId);
mapper.xml
<select id="selectAttachs" resultType="map" >
select
ba.link filePath,ba.original_name fileName
from dmyz_sign_document dsd
left join blade_attach ba on ba.id=dsd.attach_id
where sign_id =#singId and dsd.is_deleted = 0
</select>
service
/**
* 根据id查询附件并下载
*
* @param signId
* @param response
* @throws Exception
*/
void downloadFile(Long signId, HttpServletResponse response) throws IOException;
serviceImpl
这里我要从oss上下载,所以我先从oss下载到项目本地了,不然File无法识别远程文件,只能识别本地文件,这块逻辑自行修改,代码参考即可
/**
* 根据id查询附件并下载
*
* @param signId
* @param response
* @throws Exception
*/
@Override
public void downloadFile(Long signId, HttpServletResponse response) throws IOException
String path = null;
String download = null;
ServletOutputStream out=null;
FileInputStream fis=null;
try
// 根据signId查询签署文档
List<Map<String, String>> maps = signDocumentMapper.selectAttachs(signId);
// 如果不为空
if (!maps.isEmpty())
for (Map<String, String> map : maps)
String link = map.get("filePath");
String uuid = UUID.randomUUID().toString().replace("-", "");
// 文件名称 uuid随机生成
String fileName =uuid+PDF;
// 把oss文件下载到项目本地
path = SignDocumentServiceImpl.class.getClass().getResource("/").getPath() +
FileUtil.getNameWithoutExtension(link) + PDF;
// 把获取到的oss文件链接下载到本地
download = download(link, path);
File file = new File(download);
response.setCharacterEncoding("utf-8");
response.setContentType("application/file");
response.setHeader("Content-Disposition", "attachment;FileName=" + fileName);
out = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
fis = new FileInputStream(file);
while ((len = fis.read(buffer)) > 0)
out.write(buffer, 0, len);
out.flush();
response.flushBuffer();
catch (Exception e)
log.error("下载单个pdf文件失败,原因:", e);
finally
out.close();
fis.close();
访问接口测试
浏览器输入
localhost:8080/downloadFile?signId=1001
本地选择保存目录
点击保存 就看到在指定的位置上有我们的文件了
可以正常打开查看
以上是关于猿创征文|Java下载文件到本地目录(弹框选择)的主要内容,如果未能解决你的问题,请参考以下文章
猿创征文|技术成长之路-Java编程系列文件存储实践:Amazon S3实现文件上传下载,总结坑点,积累成长经验
猿创征文|技术成长之路-Java编程系列文件存储实践:Amazon S3实现文件上传下载,总结坑点,积累成长经验
猿创征文|我的四个月Java学习成长之路——从基础到框架再到项目
猿创征文 | 国产数据库实战之使用Docker部署TiDB集群