JavaWeb-文件上传(简单易懂!代码+效果)

首先需要两个jar包,直接在pom文件中添加依赖

<!--        引入commons-io包-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
<!--        commons-fileUpload包-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.5</version>
        </dependency>

前端所需要完成的代码

<form method="post" enctype="multipart/form-data" action="${pageContext.request.contextPath}/fileUpload">
    <input type="file" name="uploadFile">
    <input type="submit">
</form>
<h3>${msg}</h3>

(这里用了EL表达式,需要额外的两个包以及在页面上引用

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
)

 然后就是servlet代码(都有注释!)

package com.tangzhi.webhomework.Controller;

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.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.util.List;

@WebServlet(name = "/fileUpload",value = "/fileUpload")
public class FileUploadController extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        FileItemFactory fileItemFactory = new DiskFileItemFactory();
        ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//        request.getSession().getServletContext()是获取的servlet容器对象,
//        相当于tomcat容器了。getRealPath("/") 获取实际路径,项目发布时,
//        在容器中的实际路径。
        String filePath = getServletContext().getRealPath("/upload");
        File f = new File(filePath);
        //不存在该文件夹则创建
        if (!f.exists()){
            if (f.mkdirs()){
                System.out.println("upload文件夹创建成功!");
            }else {
                System.out.println("upload文件夹创建失败!");
            }
            //文件夹存在则执行上传操作
        }else {
            List<FileItem> list = null;
            try {
                list = servletFileUpload.parseRequest(req);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            for (FileItem fileItem: list) {
                //获取待上传文件名,分割字符获取文件类型,做文件上传限制
                String WaiteUploadFileName = fileItem.getName();
                //获取文件名的.的下标
                int index = WaiteUploadFileName.indexOf(".");
                String fileType = WaiteUploadFileName.substring(index);
                //类型判断,满足的文件类型才上传(此处是限制只能上传图片)
                if (fileType.equals(".jpg") || fileType.equals(".jpeg") || fileType.equals(".png") || fileType.equals(".gif")
                        || fileType.equals(".bmp") || fileType.equals(".tiff") || fileType.equals(".ai") || fileType.equals(".cdr")
                        || fileType.equals(".eps")){
                    //拼接新文件名:由当前时间加当前文件的文件类型
                    String newFileName = System.currentTimeMillis()+fileType;
                    File file = new File(filePath,newFileName);
                    try {
                        //上传文件
                        fileItem.write(file);
                        req.setAttribute("msg","文件上传成功!");
                        req.getRequestDispatcher("/index.jsp").forward(req,resp);
                    } catch (Exception e) {
                        System.out.println("文件上传失败!");
                        e.printStackTrace();
                    }
                }else {
                    System.out.println("文件上传失败!");
                    req.setAttribute("msg","文件不符合图片要求格式!");
                    req.getRequestDispatcher("/index.jsp").forward(req,resp);
                }
            }
        }
    }
}


实现效果(此处是限制只能上传图片格式的文件,可自定义):

 


更新 新增数据同时实现文件上传

import com.example.classHomeWork.Dao.Impl.NewsImpl;
import com.example.classHomeWork.Dao.NewsDao;
import com.example.classHomeWork.Model.FirstLevelTitle;
import com.example.classHomeWork.Model.news_detail;
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.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.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name = "/News",value = "/News")
public class NewsController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Content-type","text/html;charset=utf-8");
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        String type = req.getParameter("type");
        if (type.equals("insert")){
            try {
                selectTitleName(req,resp);
            } catch (SQLException sqlException) {
                sqlException.printStackTrace();
            }
        }else if (type.equals("insertNews")){
            insertNews(req,resp);
        }
    }

    private void insertNews(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        NewsDao newsDao = new NewsImpl();
        news_detail news = new news_detail();

        FileItemFactory fileItemFactory = new DiskFileItemFactory();
        ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
        String filePath = getServletContext().getRealPath("/upload");
        File file = new File(filePath);
        List<FileItem> list = null;
        try {
            list = servletFileUpload.parseRequest(req);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        for (FileItem fileItem : list){
            //判断是否为文件
            boolean fromElementType = fileItem.isFormField();
            if(fromElementType){
                //不是文件就获取元素的name名
                String elementName = fileItem.getFieldName();
                if (elementName.equals("categoryId")){
                    String categoryId = fileItem.getString();
                    news.setCategoryId(Integer.parseInt(categoryId));
                }
                if (elementName.equals("title")){
                    String title = fileItem.getString("utf-8");
                    news.setTitle(title);
                }
                if (elementName.equals("summary")){
                    String summary = fileItem.getString("utf-8");
                    news.setSummary(summary);
                }
                if (elementName.equals("content")){
                    String content = fileItem.getString("utf-8");
                    news.setContent(content);
                }
                if (elementName.equals("author")){
                    String author = fileItem.getString("utf-8");
                    news.setAuthor(author);
                }
                if (elementName.equals("createDate")){
                    String createDate = fileItem.getString();
                    System.out.println(createDate);
                    news.setCreateDate(createDate);
                }
            }else {
                //不存在该文件夹则创建
                if (!file.exists()){
                    if (file.mkdirs()){
                        System.out.println("upload文件夹创建成功!");
                    }else {
                        System.out.println("upload文件夹创建失败!");
                    }
                    //文件夹存在则执行上传操作
                }else {
                    //获取待上传文件名,分割字符获取文件类型,做文件上传限制
                    String WaiteUploadFileName = fileItem.getName();
                    //获取文件名的.的下标
                    int index = WaiteUploadFileName.indexOf(".");
                    String fileType = WaiteUploadFileName.substring(index);
                    //类型判断,满足的文件类型才上传(此处是限制只能上传图片)
                    if (fileType.equals(".jpg") || fileType.equals(".jpeg") || fileType.equals(".png") || fileType.equals(".gif")
                            || fileType.equals(".bmp") || fileType.equals(".tiff") || fileType.equals(".ai") || fileType.equals(".cdr")
                            || fileType.equals(".eps")){
                        //拼接新文件名:由当前时间加当前文件的文件类型
                        String newFileName = System.currentTimeMillis()+fileType;
                        File f = new File(filePath,newFileName);
                        try {
                            //写入文件
                            fileItem.write(f);

                        } catch (Exception e) {
                            System.out.println("文件上传失败!");
                            e.printStackTrace();
                        }
                        //将写入的文件路径拼接出来并存入news_detail对象
                        String picPath = filePath+"\\"+newFileName;
                        news.setPicPath(picPath);
                    }else {
                        System.out.println("插入失败!");
                        req.getRequestDispatcher("/index.jsp").forward(req,resp);
                    }
                }
            }
        }
        //这不考虑插入失败
        int result = newsDao.insertNews(news);
        req.getRequestDispatcher("/index.html").forward(req,resp);
    }

    public void selectTitleName(HttpServletRequest req, HttpServletResponse resp) throws SQLException, ServletException, IOException {
        NewsDao newsDao = new NewsImpl();
        List<FirstLevelTitle> list = new ArrayList<>();
        list = newsDao.selectTitle();
        req.setAttribute("list",list);
        req.getRequestDispatcher("jsp/insert_News.jsp").forward(req,resp);
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值