从服务器下载资源文件
说明:从服务器下载文件,如果有资源可下,没有资源下载则返回弹窗给页面
本项目使用的是springboot 集成 thymeleaf
pom文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
thymeleaf 配置
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.cache=false
后端代码
public void downloadContract(String filePathName, HttpServletRequest request, HttpServletResponse response) {
//重置
response.reset();
//设置格式为了返回html页面格式
response.setContentType("text/html; charset=UTF-8");
String localAddr = request.getLocalAddr();
File file = null;
PrintWriter writer = null;
try {
writer = response.getWriter();
file = new File("bestSignUpload"+File.separator+filePathName);
if (!file.exists()) {
//以js格式返回
writer.print("<script>alert('下载的文件不存在,请下载后再来');window.location.href='http://"+localAddr+":"+port+"/index';</script>");
return;
}
if (!file.isFile()) {
writer.print("<script>alert('下载的文件不存在,请下载后再来');window.location.href='http://"+localAddr+":"+port+"/index';</script>");
return ;
}
//本项目使用map来判断文件是否已经压缩完成,如果存在可以则认为没有压缩完成
if (contractMap.containsKey(filePathName)) {
writer.print("<script>alert('文件尚未压缩完成,请稍后在来下载');window.location.href='http://"+localAddr+":"+port+"/index';</script>");
return;
}
} catch (IOException e) {
e.printStackTrace();
}
try {
//此处在重置一遍是因为response不可以同时获取OutputStream与PrintWriter,因此防止同接口不同返回值报错
response.reset();
assert file != null;
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
//为了返回文件流
response.setContentType("application/octet-stream");
OutputStream outputStream = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
response.setCharacterEncoding(Constant.ConstantString.UTF_8);
response.setHeader("Content-Disposition", "inline; filename=\"" + filePathName + "\"");
IOUtils.copy(bis,bos);
bos.flush();
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
前端简单页面
<div style="margin-top: 20px">
<form th:action="@{/oa/synData/project/downloadContract}" target="_parent" id="download_form" method="post">
<div><p style="font-size: 16px;font-weight: bolder;color: red">下载合同到本地</p></div>
<div class="download_div inputStyle buttonStyle">
<label for="download" class="labelClass control-label">下载地址:</label>
<input type="text" id="download" name="filePathName" autocomplete="off" placeholder="请输入需要下载的压缩包名称(例如:xxx.zip)" />
</div>
<div><input type="button" class="btn btn-primary" id="download_input" value="下载"></div>
</form>
</div>
项目截图

本文介绍了如何在SpringBoot应用中结合Thymeleaf实现从服务器下载资源文件的功能。当资源存在时,允许用户选择保存路径;若资源不存在,则在浏览器中显示提示窗口。
8592

被折叠的 条评论
为什么被折叠?



