一、上传功能
jsp页面
步骤:
文件上传 1.准备表单 2.设置表单的提交类型为POST请求 method=“post” 3.设置表单类型为文件上传表单 enctype=“multipart/form-data” 4.设置文件提交的地址 5.准备表单元素(1.普通的表单项 type=“text”;2.文件项 type=“file”) 6.设置表单元素的name属性值(表单提交一定要设置表单的name属性值,否则后台无法接收数据!)
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="uploadServlet">
姓名:<input type="text" name="uname"> <br>
文件:<input type="file" name="myfile"> <br>
<button>提交</button>
</form>
</body>
</html>
Servlet的方法实现
简要步骤:
文件上传
- 使用注解@MultipartConfig将一个 Servlet 标识为支持文件上传
- Servlet 将 multipart/form-data 的 POST请求封装成Part对象, 通过Part对上传的文件进行操作
@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("文件上传...");
req.setCharacterEncoding("UTF-8");
String uname = req.getParameter("uname");
System.out.println("uname: " + uname);
Part part = req.getPart("myfile");
String fileName = part.getSubmittedFileName();
System.out.println("上传文件名:" + fileName);
String filePath = req.getServletContext().getRealPath("/");
System.out.println("文件存放路径:" + filePath);
part.write(filePath + "/" + fileName);
}
}
二、下载功能的实现
准备下载文件夹以及相关设置
在项目的工程目录下新建一个存放可供下载文件的文件夹,并准备好相关可供下载文件: 这时再把刚刚新建的文件夹添加到服务器的外部资源设置中:
jsp页面
简要说明:
超链接下载
- 当使用超链接(a标签)时,如果遇到浏览器能识别的资源,则显示内容;
- 若是无法识别,则会进行下载。
download属性
- 通过download属性规定浏览器进行下载
- download属性可以不写任何信息,会自动默认使用文件名
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件下载</title>
</head>
<body>
<a href="download/hello.txt">文本文件</a>
<a href="download/pic.jpg">图片文件</a>
<a href="download/zzz.rar">压缩文件</a>
<hr>
<a href="download/hello.txt" download>文本文件</a>
<a href="download/pic.jpg" download="test.png">图片文件</a>
<hr>
<form action="downloadServlet">
文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名">
<button>下载</button>
</form>
</body>
</html>
Servlet的方法实现
核心步骤概要说明:
文件下载
- 需要通过resp.setContentType 方法设置Content-type的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如“application/octet-stream”
- 需要通过 resp.setHeader 方法设置Content-Disposition 头的值 为“attachment;filename=文件名”
- 读取下载文件,调用response.getOutputStream 方法向客户端写入附件内容。
@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("文件下载...");
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String fileName = req.getParameter("fileName");
if(fileName == null || "".equals(fileName.trim())){
resp.getWriter().write("请输入要下载的文件名!");
resp.getWriter().close();
return;
}
String Path = req.getServletContext().getRealPath("/download/");
File file = new File(Path+fileName);
if(file.exists() && file.isFile()){
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition","attachment;filename=" + fileName);
InputStream in = new FileInputStream(file);
ServletOutputStream out = resp.getOutputStream();
byte[] bytes = new byte[1024];
int len =0;
while((len = in.read(bytes))!= -1){
out.write(bytes,0,len);
}
out.close();
in.close();
}else{
resp.getWriter().write("文件不存在,请重试!");
resp.getWriter().close();
}
}
}
源码提供
页面展示
页面都很简单,单纯只是为了功能测试。 1.开始页面
2.上传页面
3.下载页面
工程文件提供
【JavaWeb】Servlet实现文件的上传和下载功能
|