参考链接
本文主要通过i流的方式下载
- 普通文件下载
主要思路是将本地的文件读取到项目中然后获取respons的响应流向响应流中写入本地的文件数据
测试代码
@RequestMapping(value = "/dowloadHtml")
public String dowloadFileHtml(){
return "dowloadHtml";
}
/**
* 使用流的方式进行下载
* @param response
* @throws IOException
*/
@RequestMapping(value = "/dowload")
@ResponseBody
public void dowload(HttpServletResponse response) throws IOException {
//下载文件的地址 一般在项目中这个会在数据库中存储这里写死
String filePath = "D://修改.xls";
//将文件导入到项目
File file = new File(filePath);
//获取文件名
String fileName = file.getName();
//获取文件后缀
// String fileSuffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
//以流的形式下载文件
InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath));
//存放文件数据的容器
byte[] buffer = new byte[inputStream.available()];
//将流中的数据读入到容器中
inputStream.read(buffer);
inputStream.close();
//清空respont
response.reset();
//通过请求头设置文件名
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
response.addHeader("Content-Length", "" + file.length());
//获取响应的输出流 主要是使用response.getOutputStream 的输出流进行输出
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
outputStream.write(buffer);
outputStream.flush();
outputStream.close();
}
2… 网络文件下载
测试代码
/**
* 使用使用流的方式下载网络文件
* @param response
*/
@RequestMapping(value = "/dowloadNet")
@ResponseBody
public void dowloadNet(HttpServletResponse response) throws IOException {
// 下载网络文件
int bytesum = 0;
int byteread = 0;
//文件url
String fileUrl = "https://www.baidu.com/img/PCdoodle_dce011f4f164006d915e4e122012c428.png";
URL url = new URL(fileUrl);
URLConnection urlConnection= url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
byte[] bytes = new byte[1024];
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("aa.png", "UTF-8"));
// response.addHeader("Content-Length", "" + 43603);
response.setContentType("application/octet-stream");
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
while ((byteread=inputStream.read(bytes)) !=-1) {
bytesum += byteread;
outputStream.write(bytes, 0, byteread);
}
inputStream.close();
outputStream.flush();
outputStream.close();
}
html调用代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>下载测试</h3>
<a href="/testuplod/dowload">下载</a>
<br>
<a href="/testuplod/dowloadNet">下载网络文件</a>
</body>
</html>