zoukankan      html  css  js  c++  java
  • Servlet 上传图片

    Servlet 上传图片

    预备

    需求包

    commons-fileupload -用于上传
    jstl -用于jsp页面遍历
    servlet-api -使用servlet

    pom

        <dependencies>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
        </dependencies>
    

    前端代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>上传Demo</title>
    </head>
    <body>
        <form action="uploadServlet" method="post"
            enctype="multipart/form-data">
    
            上传文件:<input type="file" name="file"><br/>
            上传文件:<input type="file" name="file2"><br/> 
            <input type="submit" />
        </form>
        <c:forEach items="${pics }" var="p">
        <img src="heads/${p }" />
        </c:forEach>
    </body>
    </html>
    

    后端处理代码

    package com;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    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 org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    @WebServlet("/uploadServlet")
    public class uploadServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
    
        public uploadServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.sendRedirect("index.jsp");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            // 是否是多功能表单
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (!isMultipart) {
                return;
            }
    
            // 目标服务端目录
            String path = request.getSession().getServletContext().getRealPath("/heads");
            // String path="D:/heads";
            File file = new File(path);
    
            // 如果目录不存在就创建目录
            if (!file.exists() && !file.isDirectory()) {
                file.mkdirs();
            }
    
            // 接受文件列表
            List piclist = new ArrayList(); // 放上传的图片名
    
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
    
            upload.setHeaderEncoding("UTF-8"); // 处理中文问题
            upload.setSizeMax(1024 * 1024 * 5); // 限制文件大小5M
    
            try {
                // 得到所有表单元素
                List<FileItem> fileItems = upload.parseRequest(request); // 解码请求
    
                for (FileItem item : fileItems) {
                    System.out.println(item);
                    // 有可能是 文件,也可能是普通文字
                    if (item.isFormField()) { // 这个选项是 文字
                        System.out.println("表单值为:" + item.getString());
                    } else {
                        // 是文件
                        String fileName = item.getName();
                        System.out.println("文件名是:" + fileName); // 文件名
                        item.write(new File(path, fileName));
    
                        if (fileName.endsWith(".jpg") || fileName.endsWith(".png") || fileName.endsWith(".bmp") || fileName.endsWith(".ico") || fileName.endsWith(".gif")) {
                            piclist.add(fileName); // 把图片放入集合
                        }
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            // 去显示上传的文件
            request.setAttribute("pics", piclist);
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
    
    }
    
  • 相关阅读:
    SpringBoot异步处理请求
    5本最佳的 Java 面向对象理论和设计模式的书籍
    彻底弄懂 HTTP 缓存机制 —— 基于缓存策略三要素分解法
    Java 性能优化的五大技巧
    Java 8 最佳技巧
    Java 并发的四种风味:Thread、Executor、ForkJoin 和 Actor
    在 Java 8 中避免 Null 检查
    关于创建java线程池问题的思考
    LuoguP1858 多人背包(DP)
    Luogu[YNOI2019]排序(DP,线段树)
  • 原文地址:https://www.cnblogs.com/vmask/p/8728698.html
Copyright © 2011-2022 走看看