JavaWeb:下载文件

本文介绍了如何使用Java创建DownloadServlet以处理文件下载请求,同时提到提供一份全面的Java开发学习资料,包括基础知识、进阶课程和面试题库,旨在帮助Java工程师系统学习和提升技能.
摘要由CSDN通过智能技术生成
  1. DownloadServlet.java

package cn.itcast.web.download;

import cn.itcast.web.utils.DownLoadUtils;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.FileInputStream;

import java.io.IOException;

@WebServlet(“/downloadServlet”)

public class DownloadServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//1.获取请求参数,文件名称

String filename = request.getParameter(“filename”);

//2.使用字节输入流加载文件进内存

//2.1找到文件服务器路径

ServletContext servletContext = this.getServletContext();

String realPath = servletContext.getRealPath(“/img/” + filename);

//2.2用字节流关联

FileInputStream fis = new FileInputStream(realPath);

//3.设置response的响应头

//3.1设置响应头类型:content-type

String mimeType = servletContext.getMimeType(filename);//获取文件的mime类型

response.setHeader(“content-type”, mimeType);

//3.2设置响应头打开方式:content-disposition

//解决中文文件名问题

//1.获取user-agent请求头、

String agent = request.getHeader(“user-agent”);

//2.使用工具类方法编码文件名即可

filename = DownLoadUtils.getFileName(agent, filename);

response.setHeader(“content-disposition”, “attachment;filename=” + filename);

//4.将输入流的数据写出到输出流中

ServletOutputStream sos = response.getOutputStream();

byte[] buff = new byte[1024 * 8];

int len = 0;

while ((len = fis.read(buff)) != -1) {

sos.write(buff, 0, len);

}

fis.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

  1. DownLoadUtils.java

package cn.itcast.web.utils;

import sun.misc.BASE64Encoder;

import java.io.UnsupportedEncodingException;

import java.net.URLEncoder;

public class DownLoadUtils {

public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {

if (agent.contains(“MSIE”)) {

// IE浏览器

filename = URLEncoder.encode(filename, “utf-8”);

filename = filename.replace(“+”, " ");

} else if (agent.contains(“Firefox”)) {

// 火狐浏览器

BASE64Encoder base64Encoder = new BASE64Encoder();

filename = “=?utf-8?B?” + base64Encoder.encode(filename.getBytes(“utf-8”)) + “?=”;

} else {

// 其它浏览器

filename = URLEncoder.encode(filename, “utf-8”);

}

return filename;

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

image

image

image

image

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

image

image

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

[外链图片转存中…(img-0yB5NcoF-1711981167683)]

[外链图片转存中…(img-38azSMD8-1711981167683)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值