赞
踩
项目之前被下载的文档是存放在构建后的项目包/{basedir}/manual_file路径下。之后因为项目改为轻门户后端,仅使用jar包方式启动,造成原本的下载文档不可用。对下载文档部分进行了调整,对过程进行一下记录。
package.xml中配置内容
<fileSet>
<directory>${basedir}/manual_file</directory>
<outputDirectory>manual_file</outputDirectory>
<includes>
<include>*.docx</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
下载
@Override
public void downloadManual(String projectPath, HttpServletRequest request, HttpServletResponse response) {
String manualPath = StringUtils.join(new String[]{projectPath, "/manual_file/", "test.docx"});
DownloadUtils.downloadByFilePath(manualPath, request, response);
}
下载工具类
package com.changkong.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DownloadUtils { public static void downloadByFilePath(String path, HttpServletRequest request, HttpServletResponse response) { downloadFile(new File(path), request, response); } public static void downloadFile(File file, HttpServletRequest request, HttpServletResponse response) { InputStream fis = null; OutputStream outputStream = null; try { // 取得文件名。 String filename = file.getName(); // 取得文件的后缀名。 String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); // 以流的形式下载文件。 fis = new BufferedInputStream(new FileInputStream(file)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); // 清空response response.reset(); String realname = filename; String agent = (String)request.getHeader("USER-AGENT"); if(agent != null && agent.toLowerCase().indexOf("firefox") > 0)//火狐浏览器下采用base64编码 { realname = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(realname.getBytes("UTF-8")))) + "?="; } else { realname = URLEncoder.encode(realname, "UTF-8"); } // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" +realname); response.addHeader("Content-Length", "" + file.length()); outputStream = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); outputStream.write(buffer); outputStream.flush(); } catch (IOException ex) { ex.printStackTrace(); } finally { if (fis != null ) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
test.docx当前位置
/src/main/resources/test.docx
下载
@Override
public void downloadManual(HttpServletRequest request, HttpServletResponse response){
try {
InputStream inputStream = LocationUtil.class.getResourceAsStream("/test.docx");
File file = new File("test.docx");
FileUtils.copyInputStreamToFile(inputStream, file);
inputStream.close();
DownloadUtils.downloadFile(file,request,response);
} catch (Exception e) {
log.error("文档不存在:{}", e.getMessage());
}
}
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。