文件下载
文件下载
文件下载,SpringMVC并没有做过多的封装,还是使用原来的下载方式
JavaWeb 开发中使用 ServletOutStream 向浏览器响应数据(输出流输出数据),就是下载文件
package cn.zj.springmvc.controller;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DownloadController {
/*
* 下载文件思路
* 1. 接受需要下载文件名称,根据文件名称,找到磁盘对应的文件,读取到内存中形成一个输入流
* 2. 将输入流通过响应对象(HttpServletResponse)响应给浏览器(下载)
*
* 注意:Web一般只会下载小型文件
*
*/
@RequestMapping("/download")
public void upload(String fileName ,HttpServletResponse response) throws IOException {
//0. 判断是否vip,有积分,金豆
//TODO
//1. 接受文件名,读取磁盘对应的文件,创建输入流对象
FileInputStream inputStream = new FileInputStream("C:/"+fileName);
//2.获取响应对象的输出流
ServletOutputStream outputStream = response.getOutputStream();
//3.文件下载文件名的编码使用ISO-08859-1编码
//我们需要将我们UTF-8的 filename转换ISO-8859-1编码
//3.1先将字符串以UTF-8转换成字节数组
byte[] bytes = fileName.getBytes("UTF-8");
//3.2再将字节数组以 ISO-8859-1转换字符串
fileName = new String(bytes, "ISO-8859-1");
//4.响应的内容应该是以附件的形式响应给浏览器(设置响应头)
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
//5.响应文件给浏览器
IOUtils.copy(inputStream, outputStream);
}
}