Spring MVC 提供了一个ResponseEntity类型,使用它可以很方便 的返回HttpHeaders和HttpStatus,比传统的下载方式要简便很多。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("file")
public class DownFileDemo {
/**
* 传统的文件下载处理方式
* 用来处理文件下载 请求对应响应输出流
* 下载路径:http://localhost:8080/restfulDemo/file/download1?fileName=xxx.xxx
* @param fileName
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("download1")
public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("下载文件的名称:" + fileName);
// 1. 根据下载相对目录获取下载目录在服务器部署之后绝对目录
String realPath = request.getSession().getServletContext().getRealPath("/upload");
// 2. 通过文件输入流读取文件
FileInputStream is = new FileInputStream(new File(realPath, fileName));
// 3. 获取响应输出流
response.setContentType("text/plain;charset=UTF-8");
// 4. 附件下载 attachment 附件 inline 在线打开(默认值)
fileName=new String(fileName.getBytes("UTF-8"),"iso-8859-1");
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
// 5. 处理下载流复制
ServletOutputStream os = response.getOutputStream();
int len;
byte[] b = new byte[1024];
while(true){
len = is.read(b);
if(len == -1) break;
os.write(b, 0, len);
}
// 释放资源
os.close();
is.close();
}
/*
* Springmvc下载方式
* 下载路径:http://localhost:8080/restfulDemo/file/download2?fileNname=xxxx.xxx
*/
@RequestMapping("download2")
public ResponseEntity<byte[]> download2(HttpServletRequest request,@RequestParam ("fileName") String fileName ) throws IOException{
/* 下载路径 */
String path=request.getServletContext().getRealPath("upload");
File file=new File(path+File.separator+fileName);
HttpHeaders headers=new HttpHeaders();
/* 下载时,解决中文文件名乱码问题 */
String downloadFileName=new String(fileName.getBytes("UTF-8"),"iso-8859-1");
/* 通知浏览器以attachment(下载方式)打开文件 */
headers.setContentDispositionFormData("attachment", downloadFileName);
/* APPLICATION_OCTET_STREAM 二进制数据流(最常见的文件下载) */
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71214.html