Servlet文件的上传与下载详解
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); // 防止乱码
resp.setCharacterEncoding("UTF-8");
//1.获取要下载的文件名路径名,并通过ServletContext读取读取文件
String downloadFileName = "head.jpg"; // 我们这里写死了
ServletContext servletContext = getServletContext();
String savePath = servletContext.getRealPath("/WEB-INF/upload"); //以前上传文件保存的目录
String downloadPath = savePath + File.separator + downloadFileName;
//2.告诉客户端返回的类型
String downloadType = servletContext.getMimeType(downloadPath); //获取要下载文件的类型 (这个是image/jpeg)
resp.setContentType(downloadType); // (和要下载的类型一样)
//3.告诉客户端收到的数据是用于下载的,不是直接显示在页面的
// Content-Disposition表示收到的数据怎么处理,attachment表示附件下载使用,filename表示下载文件的名字
// filename名可以不和本地的名字一样,当有中文时会乱码,因为http协议设置的的时候不支持中文,需要进行url编码
/resp.setHeader("Content-Disposition", "attachment;filename=" + downloadFileName);
resp.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(downloadFileName, "UTF-8"));
InputStream resourceAsStream = servletContext.getResourceAsStream(downloadPath);
// getResourceAsStream() 传入文件路径,读取文件!!!!!!!!!!!!!
// 4.commons-io-1.4.jar中有IOUtils我们可以直接用,不用自己read() write()了
ServletOutputStream outputStream = resp.getOutputStream(); // 获取响应的输出流
IOUtils.copy(resourceAsStream, outputStream);
// 读取输入流的信息复制给输出流,输出给客户端,传入一个输入流和输出流 (字节字符流都行)
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- Android入门之bindService的用法详解
- SQL Server日期时间加减函数(DATEDIFF、DateAdd)的使用
- APMServ教程 PHP环境的搭建之利器
- asp.net core 使用 TestServer 来做集成测试的方法
- asp中使用redim、preserve创建动态数组实例
- C#创建WebService接口并连接的全过程
- Services.exe是什么系统文件?如何辨别services.exe是否为病毒?
- Android实现Service重启的方法
- Android ActivityManagerService启动流程详解
- SQL Server 2008 R2完美卸载教程(亲测有用)