java文件下载
我们就直接切入主题啦,文件下载只需要四步:
1.设置文件ContentType类型
2.设置文件头
3.通过response获取ServletOutputStream对象(out)
4.写到输出流(out)中
下载代码:
这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletContext对象,这个对象的用途,下面实例中有说明
下载,需要用到两个jar包:commons-fileupload.jar和commons-io.jar
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.context.ServletContextAware;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletResponse;
- import java.io.*;
- @Controller
- public class FileController implements ServletContextAware{
- //Spring这里是通过实现ServletContextAware接口来注入ServletContext对象
- private ServletContext servletContext;
- @RequestMapping("file/download")
- public void fileDownload(HttpServletResponse response){
- //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载
- String path = servletContext.getRealPath("/");
- //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
- response.setContentType("multipart/form-data");
- //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)
- response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf");
- ServletOutputStream out;
- //通过文件路径获得File对象(假如此路径中有一个download.pdf文件)
- File file = new File(path + "download/" + "download.pdf");
- try {
- FileInputStream inputStream = new FileInputStream(file);
- //3.通过response获取ServletOutputStream对象(out)
- out = response.getOutputStream();
- int b = 0;
- byte[] buffer = new byte[512];
- while (b != -1){
- b = inputStream.read(buffer);
- //4.写到输出流(out)中
- out.write(buffer,0,b);
- }
- inputStream.close();
- out.close();
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void setServletContext(ServletContext servletContext) {
- this.servletContext = servletContext;
- }
- }
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?