前端页面
<html>
<head>
<title>$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默认的类型是提交类型 type="submit" -->
<button>提交</button>
</form>
</body>
</html>
后端 文件上传
package com.xxxx.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 文件上传
* 使用注解 @MultipartConfig将一个 Servlet 标识为支持文件上传。
* Servlet 将 multipart/form-data 的 POST 请求封装成 Part对象,通过 Part 对上传的文件进行操作。
*/
@WebServlet("/uploadServlet")
@MultipartConfig // 如果是文件上传,必须要设置该注解!!!
public class UploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("文件上传...");
// 设置请求的编码格式
request.setCharacterEncoding("UTF-8");
// 获取普通表单项(获取参数)
String uname = request.getParameter("uname"); // 表单中表单元素的name属性值
System.out.println("uname:" + uname);
// 获取Part对象 (Servlet 将 multipart/form-data 的 POST 请求封装成 Part对象)
Part part = request.getPart("myfile"); // 表单中file文件域的name属性值
// 通过Part对象得到上传的文件名
String fileName = part.getSubmittedFileName();
System.out.println("上传文件名:" + fileName);
// 得到文件存放的路径
String filePath = request.getServletContext().getRealPath("/");
System.out.println("文件存放的路径:" + filePath);
// 上传文件到指定目录
part.write(filePath +"/"+ fileName);
PrintWriter writer = response.getWriter();
writer.write("Hello");
writer.write("<h2>Hello</h2>");
}
}
运行结果展示
后端代码 通过part得到的对象 sout输出到客户端
要想在前端展示 用流来实现
字符输出流 getWriter()
字节输出流 getOutputStream()
//字符输出流
PrintWriter m= response.getWriter();
m.write("Hello");
m.write("<h2>Hello</h2>");
//字节输出流
ServletOutPutStream m=response.getOutputStream();
m.write("Hello".getByte());
m.write("<h2>Hello</h2>".getBytes());
下载页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="download/新建%20DOC%20文档.txt">文本文件</a>
<a href="download/微信图片_20230308151604.png">图片文件</a>
<a href="download/jquery-3.4.1.js.zip" download="Baidu">压缩文件</a>
</body>
</html>
href写文件地址 download后面写重命名
需要把文件准备好
显示如图
综上所述 为服务器上传 下载的原理。