Servlet 上传图片

Posted Vmask

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet 上传图片相关的知识,希望对你有一定的参考价值。

[TOC]

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);
    }

}

以上是关于Servlet 上传图片的主要内容,如果未能解决你的问题,请参考以下文章

java 后台如何获取前台上传的几张图片

Servlet 上传图片

ckeditor 实现 servlet 图片上传 配置

Demo:servlet实现图片的上传

MultipartFile上传图片的写法,记录一下。

Java Servlet图片上传至指定文件夹并显示图片