1.上传核心原理
1.jsp注意点
(1)form表单请求方式为POST请求
(2)form的enctype属性值为“multipart/form-data” (含义:设置表单的类型为文件上传表单)
(3)获取文件通过type属性值file
(4)上传文件务必设置name属性值
2.servlet注意点
(1)通过getPart()方法获取Part对象
Part part = request.getPart("myfile");
(2)通过getSubmittedFileName()方法获取上传的文件名
String fileName = part.getSubmittedFileName();
System.out.println("上传文件名:"+fileName);
(3)获取上传文件存放的路径
String filePath = request.getServletContext().getRealPath("/");
System.out.println("文件存放的路径:"+filePath);
(4)将文件上传到指定位置
part.write(filePath+"/"+fileName);
2.上传实战
2.1 配置tomcat8
2.2创建工程,并导入tomcat8中的servlet和jsp的jar包
2.3创建upload.jsp
<form method="post" action="UpServlet" enctype="multipart/form-data">
姓名:<input type="text" name="uname"/><br/>
文件:<input type="file" name="myfile"/><br/>
<input type="submit" value="提交"/>
</form>
2.4创建UpServlet
@MultipartConfig
public class UpServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String uname = request.getParameter("uname");
//通过getPart()方法获取Part对象
Part part = request.getPart("myfile");
//通过getSubmittedFileName()方法获取上传的文件名
String fileName = part.getSubmittedFileName();
System.out.println("上传文件名:"+fileName);
//获取上传文件存放的路径
String filePath = request.getServletContext().getRealPath("/");
System.out.println("文件存放的路径:"+filePath);
//将文件上传到指定位置
part.write(filePath+"/"+fileName);
}
}
2.5web.xml
<servlet>
<servlet-name>UpServlet</servlet-name>
<servlet-class>cn.kgc.servlet.UpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpServlet</servlet-name>
<url-pattern>/UpServlet</url-pattern>
</servlet-mapping>
2.6测试上传
3.下载核心原理
3.1jsp注意点
(1)测试不输入参数的校验
(2)测试输入错误参数的校验
(3)测试输入正确参数的校验
3.2servlet注意点
(1)参数的非空校验,去除字符串的前后空格
if(name==null || "".equals(name.trim())){
response.getWriter().write("请输入要下载的文件名");
//关闭流
response.getWriter().close();
//退出程序
return;
}
(2)获取文件下载路径
String path = getServletContext().getRealPath("/");
(3)判断文件是否存在并且是一个标准文件
file.exists() && file.isFile()
(4)下载文件
ServletOutputStream os = response.getOutputStream();
4.下载实战
4.1创建download.jsp
<form action="DownServlet" method="post">
<input type="text" name="fileName" placeholder="请输入要下载的文件名">
<input type="submit" value="下载">
</form>
4.2创建DownServlet
public class DownServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("fileName");
//参数的非空校验,去除字符串的前后空格
if(name==null || "".equals(name.trim())){
response.getWriter().write("请输入要下载的文件名");
//关闭流
response.getWriter().close();
//退出程序
return;
}
//获取文件下载路径
String path = getServletContext().getRealPath("/");
File file = new File(path+name);
//判断文件是否存在并且是一个标准文件
if(file.exists() && file.isFile()){
//通过response.setContentType()方法设置Content-type头字段的值
response.setContentType("application/x-msdownload");
//通过setHeader()方法设置Content-Disposition头的值为attachment;filename=文件名
response.setHeader("Content-Disposition","attachment;filename="+name);
FileInputStream is = new FileInputStream(file);
//通过getOutputStream()向客户端写入附件内容
ServletOutputStream os = response.getOutputStream();
byte[] array = new byte[1024];
int len = 0;
while((len = is.read(array))!=-1){
os.write(array,0,len);
}
}else{
response.getWriter().write("文件不存在,请重试!");
response.getWriter().close();
}
}
}
4.3web.xml
<servlet>
<servlet-name>DownServlet</servlet-name>
<servlet-class>cn.kgc.servlet.DownServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownServlet</servlet-name>
<url-pattern>/DownServlet</url-pattern>
</servlet-mapping>