欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【文件上传】Java中使用smartupload工具类实现文件上传功能

程序员文章站 2022-06-18 13:56:15
...

文件上传

以前觉得这是个十分高大上的功能,结果发现,只要使用实用的工具类,五分钟就能搞定一个文件上传的功能了!

环境搭建

前提是已经搭建好开发环境。

  1. 创建JavaWEB项目
  2. Tomcat服务器安装

步骤

1. 下载工具类:smartupload
【文件上传】Java中使用smartupload工具类实现文件上传功能

  • 将其导入到项目的lib目录下
    【文件上传】Java中使用smartupload工具类实现文件上传功能

2. 写一个前端页面,此处是在jsp页面中写了一个form表单,命名为index.jsp

	<%--
	  Created by IntelliJ IDEA.
	  User: Elvira
	  Date: 2020/11/16
	  Time: 20:47
	  To change this template use File | Settings | File Templates.
	--%>
	<%@ page contentType="text/html;charset=UTF-8" language="java" %>
	<html>
	<head>
	    <title>主页</title>
	</head>
	<body>
	文件上传:<br>
	<form action="/upload" method="post" enctype="multipart/form-data">
	    名称:<input type="text" name="uname"><br>
	    文件:<input type="file" name="myfile"><br>
	    <input type="submit" value="上传">
	</form>
	
	</body>
	</html>
  • 表单提交跳转到请求名为/upload的servlet。

3. 控制上传的servlet,命名为UploadServlet。

  • 在类名上方添加WebServlet注解:value为“/upload”,与表单跳转的请求名一致。
  • 重写service方法。
    1. 上传文件
      //1. 创建对象
      SmartUpload smartUpload = new SmartUpload();
      
    2. 获得pageContext对象
      //2. 初始化
      PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, req, resp, null, false, 1024 * 5, true);
      smartUpload.initialize(pageContext);
      
    3. 设置编码方式
      smartUpload.setCharset("utf-8");
      
    4. 上传
      //实现文件数据的上传
      smartUpload.upload();
      
    5. 保存文件
      File file = smartUpload.getFiles().getFile(0);
      
    6. 得到文件的基本信息
      String filename = file.getFileName();
      //指定文件的路径
      String url = "uploadfile/" + filename;
      //将上传文件保存到指定目录
      file.saveAs(url, SmartUpload.SAVE_VIRTUAL);
      //是否保存成功?如果上传成功,页面中显示该文件。
      req.setAttribute("filename",filename);
      
    7. 测试:除文件以外的参数如何获取
      String uname = smartUpload.getRequest().getParameter("uname");
      System.out.println("uname=" + uname);
      
    8. 跳转页面
      这里一定要使用转发,要保存域里的数据。
      req.getRequestDispatcher("success.jsp").forward(req, resp);
      

4. 上传成功会转发跳转至success.jsp页面,新建jsp页面。

  • 如果上传成功,页面上会显示文件。
  • 此处拿图片做测试。
    <%--
      Created by IntelliJ IDEA.
      User: Elvira
      Date: 2020/11/18
      Time: 14:21
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>成功跳转至success.jsp,上传成功!</h1>
    <img src="uploadfile/${filename}">
    </body>
    </html>
    

servlet完整代码

package web;

import com.jspsmart.upload.File;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

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 javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
import java.io.IOException;

/**
 * @author Elvira
 * @date 2020/11/17 20:56
 * @description
 */
@WebServlet(value="/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //上传文件
        //1. 创建对象
        SmartUpload smartUpload = new SmartUpload();
        //获得pageContext对象
        //2. 初始化
        PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, req, resp, null, false, 1024 * 5, true);
        smartUpload.initialize(pageContext);
        //3. 设置编码方式
        smartUpload.setCharset("utf-8");
        try {
            //4. 上传
            //实现文件数据的上传
            smartUpload.upload();
            //5. 保存文件
            File file = smartUpload.getFiles().getFile(0);
            //6. 得到文件的基本信息
            String filename = file.getFileName();
            //指定文件的路径
            String url = "uploadfile/" + filename;
            //将上传文件保存到指定目录
            file.saveAs(url, SmartUpload.SAVE_VIRTUAL);
            //是否保存成功?如果上传成功,页面中显示该文件。
            req.setAttribute("filename",filename);
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        //7. 测试:除文件以外的参数如何获取
        String uname = smartUpload.getRequest().getParameter("uname");
        System.out.println("uname=" + uname);
        //8. 跳转页面
        req.getRequestDispatcher("success.jsp").forward(req, resp);
    }
}

效果

  • 完成上述步骤,可以开启服务器查看一下效果。

前端效果图

【文件上传】Java中使用smartupload工具类实现文件上传功能

  • 点击选择文件,弹出窗口。
    【文件上传】Java中使用smartupload工具类实现文件上传功能

  • 选择一张图片:兄妹.png,页面上显示兄妹.png,填写名称。
    【文件上传】Java中使用smartupload工具类实现文件上传功能

  • 点击上传,页面跳转。
    【文件上传】Java中使用smartupload工具类实现文件上传功能

总结

这样一个文件上传的功能就完成了,smartupload工具真是强大!