一,上传文件
fileload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/FileUplaodSerlvet" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="uername" ><br>
密码:<input type="password" name="password" ><br>
<input type="file" name="file1" >上传文件<br>
<input type="file" name="file2" >上传文件<br>
<button>提交</button>
</form>
</body>
</html>
FileIploadServlet
package com.fileupload;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
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;
@WebServlet("/FileUplaodSerlvet")
//记得配置注解
@MultipartConfig
public class FileUplaodSerlvet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//避免中文乱码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//获取存储路径
String savepath=request.getServletContext().getRealPath("/upload");
//因为我们的服务器上不确定是否有upload,所以
File file=new File(savepath);
if(!file.exists()) {
file.mkdirs();
}
//获取上传文件集合
Collection<Part> parts=request.getParts();
if(file!=null) {
for(Part part:parts) {
//以为这里part获取的包括username,password,但是他们的类型为空,所以需要排除它们
if(part.getContentType()!=null) {
//Servlet3.0将multipart/form-data的post的请求封装成Part,通过Part对文件上传操作。
//Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
//获取请求头,请求头的格式:form-data;name="file";filenme="*******.zip"
String header =part.getHeader("content-disposition");
//从请求头里获取文件名
String filename=getFileName(header);
//把文件写到指定路径
//File.separator系统兼容写法/或\
part.write(savepath+File.separator+filename);
}
}
PrintWriter out =response.getWriter();
out.println("上传成功");
out.flush();
out.close();
}
}
private String getFileName(String header) {
/**
* String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
* 火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
* IE浏览器下:tempArr1={form-data,name="file",filename="E:snmp4j--api.zip"}
*/
String[] tempArr1=header.split(";");
/**
* 火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
* IE浏览器下:tempArr2={filename,"E:snmp4j--api.zip"}
*/
String[] tempArr2=tempArr1[2].split("=");
// 获取文件名,兼容各种浏览器的写法
String filename=tempArr2[1].substring(tempArr2[1].lastIndexOf("\")+1).replaceAll(""","");
return filename;
}
}
查看服务器项目下的上情况E:apache-tomcat-8.0.29webappDemo0809upload
二,下载文件
download.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/download">下载</a>
</body>
</html>
DownloadServlet.java
package com.listener;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/download")
public class Download extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置服务器的响应为下载模式
response.setContentType("application/x-msdownload");
//设置文件下载后的名字
String filename="1.jpg";
//设置请求头的格式
response.setHeader("content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));
//设置从服务器下载的路径
String url=request.getServletContext().getRealPath("/upload/")+"1.jpg";
//设置输出流
OutputStream out=response.getOutputStream();
//设置输入从服务器上获取资源
InputStream in=new FileInputStream(url);
//设置缓冲区
byte[] buffer=new byte[1024];
int len=in.read(buffer);
while(len!=-1) {
out.write(buffer,0,len);
len=in.read(buffer);
}
out.close();
in.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}