JSP文件上传

1 篇文章 0 订阅

JSP文件上传

网上的方法几乎都是使用的org.apache.commons.fileupload的jar包,需要手动下载导入commons-fileupload.jar和commons-io.jar。

其实tomcat自带的org.apache.tomcat.util.http.fileupload就可以实现文件上传,不要手动下载导入jar包,使用方法几乎一样。

1. 项目目录结构

这里写图片描述

2. uploadServlet.java

package servlet;

import java.io.File;
import java.io.IOException;
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.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;



/**
 * Servlet implementation class uploadServlet
 */
@WebServlet("/upload")
public class uploadServlet extends HttpServlet {
    private static final  int MAX_FILE_SIZE= 1024* 1024 * 500; //最大上传文件大小500MB
    //上传文件存储目录
    private static final String UPLOAD_DIRECTOR="upload";
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()YSS    
     */
    public uploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //doGet(request, response);
        System.out.println("开始上传");
        try {
            //创建硬盘文件项目工厂类实例
            DiskFileItemFactory factory=new DiskFileItemFactory();
            //创建处理文件上传处理程序
            ServletFileUpload fileUpload=new ServletFileUpload(factory);
            //设置上传文件的最大限额为500M
            fileUpload.setSizeMax(MAX_FILE_SIZE);
            //将客户端的请求内容解析转化为FileItem集合
            List<FileItem> fileItems=fileUpload.parseRequest(new ServletRequestContext(request));
            //开始将文件项目FileItem存储到硬盘
          boolean isSuccessful=saveFileItemList(fileItems,getSavePath());
          if(isSuccessful)
          {
              request.setAttribute("result", "文件上传成功!");
          }
          else {
              request.setAttribute("result", "文件上传失败!");
        }


        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            request.setAttribute("result", "文件上传失败!");

        }
        finally {
            request.getRequestDispatcher("/index.jsp").forward(request, response);;
        }

    }

    /**
     * 将文件项目集合存储的硬盘的savePath路径
     * @param fileItems
     * @param savePath
     * @return
     * @throws Exception
     */
    private boolean saveFileItemList(List<FileItem> fileItems,String savePath) throws Exception {

        try {
            for(FileItem item:fileItems)
            {
                System.out.println("文件名:"+item.getName());

                //设置文件的存储路径
                String fileSavePath=savePath+File.separator+item.getName();
                //实例化File类,用以写入存储上传的文件
                File  saveFile= new File(fileSavePath);

                System.out.println("文件存储路径:"+fileSavePath);

                item.write(saveFile);

            }

            return true;

        } catch (Exception e) {
            // TODO: handle exception
            return false;
        }

    }

    /**
     * 获取上传文件存储的目录路径
     * @return
     */
    private String getSavePath() {
        String savePath=getServletContext().getRealPath("/")+UPLOAD_DIRECTOR;
        System.out.println(savePath);
        File uploadDir= new File(savePath);

        if(!uploadDir.exists())
        {
            uploadDir.mkdir();
        }

        return savePath;

    }

}

3. index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
  <form action="upload" method="post" enctype="multipart/form-data">
  <input type="file" name="fileupload" value="upload"/></br>
  <input type="submit" value="上传"/>
  </form>
    <p>${result }</p>
  </body>
</html>

4. 运行结果

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值