上传文件的数据 因为太多太乱,所以谷歌浏览器不显示,使用空行代替。
commons-fileupload.jar 和 commons-io.jar 包中,我们常用的类有哪些?ServletFileUpload 类,用于解析上传的数据。FileItem 类,表示每一个表单项
boolean ServletFileUpload.isMultipartContent(HttpServletRequest request);判断当前上传的数据格式是否是多段的格式。
public List
parseRequest(HttpServletRequest request) 解析上传的数据
boolean FileItem.isFormField()判断当前这个表单项,是否是普通的表单项。还是上传的文件类型。true 表示普通类型的表单项false 表示上传的文件类型
String FileItem.getFieldName()获取表单项的 name 属性值
String FileItem.getString()
获取当前表单项的值。
String FileItem.getName();获取上传的文件名
void FileItem.write( file );将上传的文件写到 参数 file 所指向抽硬盘位置 。
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>fileUploadtitle>
- head>
- <body>
- <form action="http://localhost:8080/12_file/myFileupload"
- method="post" enctype="multipart/form-data">
- 用户名:<input type="text" name="username"/><br/>
- 头像:<input type="file" name="photo"/><br/>
- <input type="submit" value="上传"/>
- form>
- body>
- html>
解析上传的数据代码
-
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("表单数据传进来了。");
- //1 先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
- if(ServletFileUpload.isMultipartContent(request)){
- //创建 FileItemFactory 工厂实现类
-
- FileItemFactory fileItemFactory = new DiskFileItemFactory();
- // 创建用于解析上传数据的工具类 ServletFileUpload 类
- ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
-
- try {
- // 解析上传的数据,得到每一个表单项 FileItem
- List
list = servletFileUpload.parseRequest(request); -
- //循环判断,每一个表单项,是普通类型,还是上传的文件
- 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:\\java\\文件处理\\文件处理2\\"+fileItem.getName()));
- System.out.println("上传成功");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
1. 获取要下载的文件名2.读取要下载的文件内容3.通过响应头告诉客户端返回的数据类型4.还要告诉客户端收到的数据是用于下载使用的5.把下载的文件内容回传给客户端
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 1. 获取要下载的文件名
- String fileName = "1.jpg";
-
- // 2.读取要下载的文件内容(通过ServletContext对象可以读取)
- ServletContext servletContext = getServletContext();
- // 将文件转成以流的方式(即读取文件)
- InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + fileName);
-
- // 3.通过响应头告诉客户端返回的数据类型
- // 读取下载的文件路径,并返回文件的数据类型
- String mimeType = servletContext.getMimeType("/file/" + fileName);
- System.out.println("下载的文件类型:" + mimeType);
- // 通过响应头告诉客户端文件返回的数据类型
- response.setContentType(mimeType);
-
- // 4.还要告诉客户端收到的数据是用于下载使用的
- // Content-Disposition响应头,表示是收到的数据类型
- // attachment表示附件,表示下载使用
- // filename= 表示指定下载的文件名 若文件名为中文,则把中文名进行 UTF-8 编码操作。
- response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("美女图片.jpg", "UTF-8"));
-
- // 5.把下载的文件内容回传给客户端
- // 获取响应头的输出流
- ServletOutputStream outputStream = response.getOutputStream();
-
- // 读取输入流中的全部数据,复制给输出流,输出给客户端
- IOUtils.copy(resourceAsStream,outputStream);
- System.out.println("下载成功");
-
- }