您的位置:首页 > 编程语言 > Java开发

Spring Boot项目实现下载项目根目录下指定目录(doc)里的文件

2018-03-12 18:03 615 查看
1.页面请求下载

<a href="/downloadFile">点击下载项目中的文件</a>


2.controller接收页面下载的请求,开始下载项目中的文件,其中使用到了自定义的FileUtil类

@RequestMapping("downloadFile")
@ResponseBody
public void Download(HttpServletResponse response) {
String fileName = "ceshi1.txt";
String result = FileUtil.downloadFile(response, fileName);
System.out.println(result);

}


3.FileUtil.java工具类
   注意导包的时候,使用的是import org.springframework.util.ResourceUtils;

/**
* 下载项目根目录下doc下的文件
* @param response response
* @param fileName 文件名
* @return 返回结果 成功或者文件不存在
*/
public static String downloadFile(HttpServletResponse response, String fileName) {
File path = null;
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
path = new File(ResourceUtils.getURL("classpath:").getPath());
os = response.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(new File(path + "/doc/" + fileName)));
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (FileNotFoundException e1) {
//e1.getMessage()+"系统找不到指定的文件";
return "系统找不到指定的文件";
}catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
}


4.项目根目录下doc里放置测试文件ceshi1.txt



5、注意:如果将项目部署到linux下有可能回出现,下载文件为空,或者出现下载文件时,文件出现乱码,FileUtil.java解决方法如下

/**
* 下载项目根目录下doc下的文件
* @param response response
* @param fileName 文件名
* @return 返回结果 成功或者文件不存在
*/
public static String downloadFile(HttpServletResponse response, String fileName) {
InputStream stream = FileUtil.class.getClassLoader().getResourceAsStream("doc/" + fileName);
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
String name = java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLDecoder.decode(name, "ISO-8859-1") );
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(stream);
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (FileNotFoundException e1) {
//e1.getMessage()+"系统找不到指定的文件";
return "系统找不到指定的文件";
}catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
}

6、如果在linux下部署项目,在不同浏览器下载项目内文件出现乱码的情况,参照如下解决

     6.1、前台传递参数页面

<div class="cg-title">
<span>数达营销白皮书</span>
<a href="">
<img alt="" src="/static/img/icon/下载.png"> 点此下载
</a>
</div>

    6. 2、javascript页面
// 文件下载demo
$(".cg-title a").bind("click", function () {
url = "/testDownFile?filename="+encodeURI($(this).prev().text());
console.log(url)
location.href = url;
return false;
})

    6.3、controller核心代码块
@RequestMapping("testDownFile")
@ResponseBody
public void Download(HttpServletRequest request, HttpServletResponse response) {
String fileName = request.getParameter("filename")+".pdf";
System.out.println(fileName);
String result = FileUtil.downloadFile(response, fileName, request.getHeader("User-Agent").indexOf("Trident")==-1);
System.out.println(result);

}

   6.4、FileUtil.java
/**
* 下载项目根目录下doc下的文件
* @param response response
* @param fileName 文件名
* @return 返回结果 成功或者文件不存在
*/
public static String downloadFile(HttpServletResponse response, String fi
ac06
leName, boolean notIE) {
InputStream stream = FileUtil.class.getClassLoader().getResourceAsStream("doc/" + fileName);
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
String name = java.net.URLEncoder.encode(fileName, "UTF-8");
if (notIE) {
name = java.net.URLDecoder.decode(name, "ISO-8859-1");
}
response.setHeader("Content-Disposition", "attachment;filename=" + name );
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(stream);
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (FileNotFoundException e1) {
//e1.getMessage()+"系统找不到指定的文件";
return "系统找不到指定的文件";
}catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: