D10 Sping Boot 入门 Sping框架--Java Web之文件操作--上传和下载

文件上传下载

  1、文件的上传

    Ⅰ、要有一个form标签,method=post请求。

    Ⅱ、form标签的encType属性值必须是multipart/form-data值。

    Ⅲ、在form标签使用input type=file添加上传的文件。

    Ⅳ、编写服务器代码(Servlet程序)接收,处理上传的数据。

    

    encType=multipart/form-data表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器。

     新建upload.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>upload</title>
 5 </head>
 6 <body>
 7     <form action="http://localhost:8080/EL_JSTL/uploadServlet" method="post" enctype="multipart/form-data">
 8         用户名:<input type="text" name="username" id="username"><br />
 9         头像:<input type="file" name="photo" id="photo"><br />
10         <input type="submit" value="上传">
11     </form>
12 </body>
13 </html>

    新建UploadServlet程序(并在web.xml中配置Servlet程序)

    
 1 package com.gychen.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.ServletInputStream;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.io.IOException;
 9 
10 public class UploadServlet extends HttpServlet {
11 
12     /**
13      * 处理文件上传的数据
14      * @param req
15      * @param resp
16      * @throws ServletException
17      * @throws IOException
18      */
19     @Override
20     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
21 
22         System.out.println("文件已上传");
23         ServletInputStream inputStream = req.getInputStream();
24         byte[] buffer = new byte[1024000];
25         int read = inputStream.read(buffer);
26         System.out.println(new String(buffer,0,read));
27     }
28 }
UploadServlet

    

  2、服务器解析上传文件

    Ⅰ、导入两个jar包

     

     Ⅱ、两个jar包中的常用类

    ServletFileUpload类,用于解析上传的数据。

    FileItem类,表示每一个表单项。

    

     

   3、fileupload类库的使用

    
 1 package com.gychen.servlet;
 2 
 3 import org.apache.commons.fileupload.FileItem;
 4 import org.apache.commons.fileupload.FileItemFactory;
 5 import org.apache.commons.fileupload.FileUploadException;
 6 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 7 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 8 
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletInputStream;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 import java.io.File;
15 import java.io.IOException;
16 import java.util.List;
17 
18 public class UploadServlet extends HttpServlet {
19 
20     /**
21      * 处理文件上传的数据
22      * @param req
23      * @param resp
24      * @throws ServletException
25      * @throws IOException
26      */
27     @Override
28     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
29 
30 
31         //判断上传的数据是否为多段数据(只有是多段数据才是文件上传的)
32         if(ServletFileUpload.isMultipartContent(req)){
33             //创建FileItemFactory工厂实现类
34             FileItemFactory fileItemFactory = new DiskFileItemFactory();
35             //创建用于解析上传数据的工具类ServletFileUpload
36             ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
37             //解析上传的数据,得到每一个表单项FileItem
38             try {
39                 List<FileItem> list = servletFileUpload.parseRequest(req);
40                 //循环判断每一个表单项是普通类型还是上传的文件
41                 for(FileItem fileItem : list){
42                     if(fileItem.isFormField()){
43                         //普通表单项
44                         System.out.println("表单项的name属性值:"+fileItem.getFieldName());
45                         //参数utf-8,解决乱码问题
46                         System.out.println("表单项的value值:"+fileItem.getString("utf-8"));
47                     }else{
48                         //上传的文件
49                         System.out.println("文件的name属性值:"+fileItem.getFieldName());
50                         System.out.println("文件的文件名:"+fileItem.getName());
51                         //把文件写入磁盘
52                         fileItem.write(new File("D:\\MyStudy\\" +
53                                 "SpringBootStudy\\JavaWebStudy\\EL&JSTL\\" +
54                                 "web\\file\\upload\\"+fileItem.getName()));
55                     }
56                 }
57             } catch (Exception e) {
58                 e.printStackTrace();
59             }
60         }
61     }
UploadServlet

    

猜你喜欢

转载自www.cnblogs.com/nuister/p/12620863.html