目录
1.文件的上传介绍(重点)
1.文件上传,HTTP协议的说明
2.commons-fileupload.jar 常用API介绍说明
3.fileupload类库的使用
2.文件下载
1.文件的上传介绍(重点)
1.要有一个form标签,method=post请求
2.form标签的encType属性值必须为multipart/form-data值
3.在form标签中使用input type=file添加上传文件
4.编写服务器代码(Servlet程序)接收,处理上传的数据
encType=multipart/form-data表示提交数据,以多段(每一个表单项 一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器
1.文件上传,HTTP协议的说明
2.commons-fileupload.jar 常用API介绍说明
1.commons-fileupload.jar 需要依赖 commons-io.jar 这个包,所以这两个包都要引入
commons-fileupload-1.4.jar
commons-io-2.11.0.jar
2.commons-fileupload.jar和commons-io.jar包中,我们常用的类有哪些?
ServletFileUpload类,用于解析上传的数据
FileItem类,表示每一个表单项.
(1) boolean isMultipartContent(HttpServletRequest request)
判断当前上传的数据格式是否是多段的格式
(2) public List parseRequest (HttpServletRequest request)
解析上传的数据
(3) boolean FileItem.isFormField()
判断当前这个表单项,是否是普通的的表单项。还是上传的文件类型。
true 表示普通类型的表单项
false 表示上传的文件类型
(4) String FileItem.getFieldName()
获取表单项的name属性值
(5) String FileItem.getString()
获取当前表单项的值
(6) Sting FileItem.getName
获取上传的文件名
(7) viod FileItem.write( file )
将上传的文件写到参数file所指向的硬盘位置
3.fileupload类库的使用
代码演示:
java:
package com.atshangma;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//1.先判断上传的数据是否多段数据(只有是多段数据,才是文件上传的)
if (ServletFileUpload.isMultipartContent(req)){
//创建FileItemFactory工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建用于解析上传数据的工具类ServletFileUpload类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//解析上传的数据,得到每一个表单项FileItem
try {
List list = servletFileUpload.parseRequest(req);
//循环判断,每一个表单项,是普通类型,还是上传文件
for (FileItem fileItem : list) {
if (fileItem.isFormField()){
//普通表单项
System.out.println("表单项的name属性值:" + fileItem.getFieldName());
//参数UTF-8,解决乱码问题
System.out.println("表单项的value属性值:" + fileItem.getString("UTF-8"));
}else {
//上传文件
System.out.println("表单项的name属性值:" + fileItem.getFieldName());
System.out.println("上传的文件名:" + fileItem.getName());
fileItem.write(new File("e:\"+fileItem.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
jsp:
<%--
Created by IntelliJ IDEA.
User: JAVASM
Date: 2022/2/8
Time: 16:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
1.要有一个form标签,method=post请求
2.form标签的encType属性值必须为multipart/form-data值
3.在form标签中使用input type=file添加上传文件
4.编写服务器代码(Servlet程序)接收,处理上传的数据
encType=multipart/form-data表示提交数据,以多段(每一个表单项 一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器
1.文件上传,HTTP协议的说明
2.commons-fileupload.jar 常用API介绍说明
1.commons-fileupload.jar 需要依赖 commons-io.jar 这个包,所以这两个包都要引入
commons-fileupload-1.4.jar
commons-io-2.11.0.jar
2.commons-fileupload.jar和commons-io.jar包中,我们常用的类有哪些?
ServletFileUpload类,用于解析上传的数据
FileItem类,表示每一个表单项.
(1) boolean isMultipartContent(HttpServletRequest request)
判断当前上传的数据格式是否是多段的格式
(2) public List
解析上传的数据
(3) boolean FileItem.isFormField()
判断当前这个表单项,是否是普通的的表单项。还是上传的文件类型。
true 表示普通类型的表单项
false 表示上传的文件类型
(4) String FileItem.getFieldName()
获取表单项的name属性值
(5) String FileItem.getString()
获取当前表单项的值
(6) Sting FileItem.getName
获取上传的文件名
(7) viod FileItem.write( file )
将上传的文件写到参数file所指向的硬盘位置
3.fileupload类库的使用
代码演示:
java:
package com.atshangma;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//1.先判断上传的数据是否多段数据(只有是多段数据,才是文件上传的)
if (ServletFileUpload.isMultipartContent(req)){
//创建FileItemFactory工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建用于解析上传数据的工具类ServletFileUpload类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//解析上传的数据,得到每一个表单项FileItem
try {
List list = servletFileUpload.parseRequest(req);
//循环判断,每一个表单项,是普通类型,还是上传文件
for (FileItem fileItem : list) {
if (fileItem.isFormField()){
//普通表单项
System.out.println("表单项的name属性值:" + fileItem.getFieldName());
//参数UTF-8,解决乱码问题
System.out.println("表单项的value属性值:" + fileItem.getString("UTF-8"));
}else {
//上传文件
System.out.println("表单项的name属性值:" + fileItem.getFieldName());
System.out.println("上传的文件名:" + fileItem.getName());
fileItem.write(new File("e:\"+fileItem.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
jsp:
<%--
Created by IntelliJ IDEA.
User: JAVASM
Date: 2022/2/8
Time: 16:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
2.文件下载
下载的常用API说明:
resp.getOutputStream();
servletContext.getResourceAsStream();
servletContext.getMimeType();
resp.setContentType();
代码演示:
package com.atshangma;
import org.apache.commons.io.IOUtils;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
public class Download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取要下载的文件名
String downloadFileName = "123.jpg";
//2.读取要下载的文件内容(通过ServletContext对象读取)
ServletContext servletContext = getServletContext();
//获取要下载的文件类型
String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
System.out.println("下载的文件类型:" + mimeType);
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName);
//获取响应的输出流
ServletOutputStream outputStream = resp.getOutputStream();
//3.在回传前,通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
//4.还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
//Content-Disposition响应头,表示收到的数据怎么处理
//attachment表示附件,表示下载使用
//filename= 表示下载的文件名
resp.setHeader("content-Disposition","attachment;filename=" + downloadFileName);
//5.把下载的文件内容回传给客户端
//读取输入流中全部的数据,复制给输出流,输出给客户端
IOUtils.copy(resourceAsStream,outputStream);
}
}
下载的常用API说明:
resp.getOutputStream();
servletContext.getResourceAsStream();
servletContext.getMimeType();
resp.setContentType();
代码演示:
package com.atshangma;
import org.apache.commons.io.IOUtils;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
public class Download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取要下载的文件名
String downloadFileName = "123.jpg";
//2.读取要下载的文件内容(通过ServletContext对象读取)
ServletContext servletContext = getServletContext();
//获取要下载的文件类型
String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
System.out.println("下载的文件类型:" + mimeType);
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName);
//获取响应的输出流
ServletOutputStream outputStream = resp.getOutputStream();
//3.在回传前,通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
//4.还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
//Content-Disposition响应头,表示收到的数据怎么处理
//attachment表示附件,表示下载使用
//filename= 表示下载的文件名
resp.setHeader("content-Disposition","attachment;filename=" + downloadFileName);
//5.把下载的文件内容回传给客户端
//读取输入流中全部的数据,复制给输出流,输出给客户端
IOUtils.copy(resourceAsStream,outputStream);
}
}



