上传文件:

前端html:
<form action="upload" method="post" enctype="multipart/form-data">
	<input type="file" name="file" />
	<input type="submit" value="Submit" />
</form>


后端java:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.File;
import javax.servlet.http.Part;
import javax.servlet.annotation.MultipartConfig;


@WebServlet("/upload")
@MultipartConfig	//使用Servlet3的上传组件
public class upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); //设置请求文档编码,上传文件名出现乱码就需要设置这个值    	

		Part part = request.getPart("file"); //获取html上传对象<input type="file" />
    	String fname = part.getSubmittedFileName(); //获取上传文件名称,带后缀
    	String fpath = request.getRealPath(File.separator+ "sj" +File.separator+ fname); //设置保存文件路径,绝对
    	part.write(fpath); //保存文件
  
	}
  
}


getPart:接受一个表单名为参数,返回对应的Part对象
getParts:返回一个包含所有Part的Collection集合

多个file集合保存:
String fname = "";
String fpath = request.getRealPath(File.separator+"dirname");
for (Part part : request.getParts()) {
  fname = part.getSubmittedFileName();
  part.write(fpath +File.separator+ fname);
}
Part方法
返回类型 方法/描述
String getContentType()

获取上传文件的MIME类型
String getName()

获取表单项的名称,不是文件名称
String getHeader(String header)

获取指定头的值
long getSize()

获取上传文件的大小
InputStream getInputStream()

获取上传文件的内容
void write(String fileName)

把上传文件保存到指定路径下





下载文件:

纯html:

<a href="a.zip" download>

注:download的兼容不好,老版本浏览器href文件类型不能是txt、png等类型的文件