JSP&Servlet(11)——使用Servlet实现文件上传功能

本项目的文件上传使用的是apache下的commons组件来实现,包括commons-fileuplload.jar包和commons-io.jar包。

上传之前需要创建存放上传文件存放临时文件的目录。

在磁盘下创建一个upload的目录,然后在upload中再创建一个temp的子目录。

效果展示

项目结构

代码

pom.xml

在此项目中需要使用的第三方加包的依赖如下:

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
    </dependency>

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>文件上传</title>
</head>
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
    <input type="submit" value="上传文件" name="upload">
    <br>
    <input type="file" name="x" size="40"/>
</form>
</body>
</html>

UploadServlet.java

package servlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
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.PrintWriter;
import java.util.Iterator;
import java.util.List;

public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 设置请求的编码
        request.setCharacterEncoding("UTF-8");
        // 设置响应的编码
        response.setContentType("text/html;charset=UTF-8");
        // 设置输出控制台编码
        System.setProperty("sun.jnu.encoding", "utf-8");
        // 设置存放上传文件的目录
        String filePath = "G:\\Web\\ServletDemo";
        // 设置存放临时文件的目录
        String tempFilePath = "G:\\Web\\ServletDemo\\temp";
        // 创建一个输出
        PrintWriter writer = response.getWriter();
        try {
            // 创建一个基于硬盘的FileItem工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 设置向硬盘写数据时所用的缓冲区的大小,此处为4K
            factory.setSizeThreshold(4 * 1024);
            // 设置临时目录
            factory.setRepository(new File(tempFilePath));
            // 创建一个文件上传处理器
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 设置允许上传的文件的最大尺寸,此处为4M
            upload.setSizeMax(4 * 1024 * 1024);
            // 中文处理
            upload.setHeaderEncoding("UTF-8");
            // 解析请求的内容提取文件数据
            List<FileItem> fileItems = upload.parseRequest(request);
            // 创建迭代器
            Iterator iterator = fileItems.iterator();
            // 迭代表单数据
            while (iterator.hasNext()) {
                FileItem item = (FileItem) iterator.next();
                // isFormField()方法是判断item一个普通文本表单字段,还是一个文件表单字段
                // 如果不是普通字段则是上传的文件进行上传
                if (!item.isFormField()) {
                    // 需要上传的文件的路径
                    String fileName = item.getName();
                    int index = fileName.lastIndexOf("\\");
                    // 文件名
                    fileName = fileName.substring(index + 1, fileName.length());
                    // 文件大小
                    long fileSize = item.getSize();
                    if (fileName.equals("") || fileSize == 0) {
                        return;
                    }
                    // 将数据写入文件
                    File uploadFile = new File(filePath + "/" + fileName);
                    item.write(uploadFile);
                    // 前台响应上传成功的结果
                    writer.println(fileName + "已经保存" + "\t\t" + "文件" + fileName + " 的大小:" + fileSize + "\r\n");
                }
            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <!--欢迎页面-->
  <welcome-file-list>
    <welcome-file>upload.jsp</welcome-file>
  </welcome-file-list>
  <!--文件上传Servlet-->
  <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>servlet.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/uploadServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

如果对完整源码感兴趣。

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【CSDN201910072131】可获取本节源码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值