文件上传Web小案例

一.首先要导入JAR包

       1.导入如下图所示的jar包

 

      链接如下:

      https://pan.baidu.com/s/11DXbOhVO9E3-YvSaM9_7zg

      提取码:4cvb

二.在你的代码WAR包下面创建一个upload文件夹

      2.1我的路径是:保存文件的路径E:\IDEACode\out\artifacts\2020_1_20webproject_war_exploded\upload

三.上代码

      3.1大概思路你要了解一下子

            用jsp页面将文件选中然后点击提交后会上传,则就有一个upload.jsp和一个UpLoadServlet

       3.2,jsp代码

        

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    文件:<input type="file" name="file" ><br>
    <input type="submit">
</form>
</body>
</html>

        3.3Servlet代码

package web_servlet;
import org.apache.commons.fileupload.FileItem;
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.annotation.WebServlet;
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.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.解析表单数据
        //创建一个工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2.获取文件上传对象
        ServletFileUpload sfu = new ServletFileUpload(factory);
        //3.获取File
        try {
            List<FileItem> items = sfu.parseRequest(request);
            for (FileItem item : items) {
                if (item.isFormField()) {//普通数据
                    System.out.println(item.getFieldName() + "------" + item.getString());
                } else {//文件数据
                    System.out.println("文件大小" + item.getSize());
                   // System.out.println("文件字段" + item.getString());
                    //如果是文件,需要把文件保存到本地
                    //1.指定文件保存的路径
                    //注意:添加一个日期目录
                    /**
                     * SimpleDateFormat =new SimpleDateFormat("yyyMMdd");
                     * String dateStr=sdf.format(new Date());
                     */
                    SimpleDateFormat sdf=new SimpleDateFormat("yyyMMdd");
                    String dateStr=sdf.format(new Date());
                    String path = request.getServletContext().getRealPath("upload"+"\\"+dateStr);
                    System.out.println("保存文件的路径" + path);
                    //2.创建一个文件夹
                    File dir = new File(path);
                    if (!dir.exists()) {
                        dir.mkdirs();
                        System.out.println("创建了文件夹");
                    } else {
                        System.out.println("文件夹exits");
                    }
                    //3.将上传的文件进行保存
                    //3.1设定文件保存的名字
                    //获取后缀名
                    String suffix = item.getName().split("\\.")[1];
                    String filename = UUID.randomUUID().toString() + "." + suffix;
                    //3.2拼接一个文件保存路径
                    String fileSavePath = path + "\\" + filename;
                    System.out.println(fileSavePath);
                    //3.3保存
                    try {
                        item.write(new File(fileSavePath));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }
}

四.总结

       4.1大概就是这样,只要知道有这么个jar包就行了,你自己用I/O技术也可以实现,但是性能方面会有所不同

 //创建一个工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2.获取文件上传对象
        ServletFileUpload sfu = new ServletFileUpload(factory);
上面这两行大概就是核心代码,大家可以了解一下
posted @ 2020-01-21 10:58  maskpd  阅读(226)  评论(0编辑  收藏  举报