JSP文件上传

Java知识点总结:想看的可以从这里进入

6.8、文件上传

JSP要是先文件的上传需要使用Commons-FileUpload 组件,可以下载jar包,也可以直接使用依赖

  • 下载jar文件:commons-fileuploadcommons-io 导入lib中即可

  • 使用 pom加载相关依赖

    <!--文件上传组件-->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.8.0</version>
    </dependency>
    

Commons-FileUpload 组件的接口和实现类:

  • FileItemFactory工厂:创建 ServletFileUpload 实例

    方 法说 明
    void setSizeThreshold(int sizeThreshold)设置内存缓冲区的大小
    void setRepository(String path)设置临时文件存放的目录
  • ServletFileUpload类:用于实现文件上传操作

    方 法说 明
    void setSizeMax(long sizeMax)设置上传文件总量的最大值
    List parseRequest(HttpServletRequest req)解析 form 表单提交的数据,返回一个 FileItem 实例的集合
    boolean isMultipartContent(HttpServletRequest req)判断请求信息中的内容是否是”multipart/form-data“类型,是则返回 true,否则返回 false。
    void setHeaderEncoding(String encoding)设置转换时所使用的字符集编码
  • FileItem 接口:用于封装单个表单字段元素的数据,一个表单字段对应一个 FileItem 实例

    方 法说 明
    boolean isFormField()用于判断 FileItem 类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果是普通表单字段则返回 true,否则返回 false。
    String getName()获取文件上传的文件名
    String getFieldName()返回表单字段元素的 name 属性值
    long getSize()获取上传文件的大小
    String getString()将 FileItem 对象中保存的主体内容以一个字符串返回。
    void write()将 FileItem 对象中保存的主体内容保存到指定的文件中。

文件上传时表单的method 要设置成 post,enctype 设置成 ultipart/form-data(将上传的数据设置成二进制),action设置对应的servlet处理上传的文件,使用 input 的 file上传文件。

<form action="${pageContext.request.contextPath}/UploadFileServlet" method="post" enctype="multipart/form-data">
    上传文件:<input type="file" name="file">
    <br/>
    <input type="submit" value="提交">
</form>
//servlet处理文件
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    // 判断是否为multipart/form-data
    if (!ServletFileUpload.isMultipartContent(request)) {
        request.setAttribute("message", "必须为multipart/form-data数据");
    }else {
        // 配置FileItemFactory工厂
        FileItemFactory factory = new DiskFileItemFactory();
        // 创建用于解析数据的工具类ServletFileUpload类
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 防止上传文件名称乱码
        upload.setHeaderEncoding("UTF-8");
        // 构造临时路径来存储上传的文件
        String uploadPath = "D:\\ideaWork\\servlet\\src\\upload";
        // 如果目录不存在则创建
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }
        try {
            // 解析请求的内容提取文件数据
            List<FileItem> formItems = upload.parseRequest(request);
            if (formItems != null && formItems.size() > 0) {
                // 迭代表单数据,判断每个表单项是普通类型还是上传的文件
                for (FileItem item : formItems) {
                    //上传的数据为文件的表单项处理方式
                    if (!item.isFormField()) {
                        //文件名
                        String fileName = item.getName();
                        System.out.println("文件名:"+fileName);
                        // 保存的路径
                        String filePath = uploadPath + File.separator + fileName;
                        System.out.println(filePath);
                        // 保存文件到硬盘
                        File storeFile = new File(filePath);
                        item.write(storeFile);
                        request.setAttribute("message", "文件上传成功!");
                    }
                }
            }
        } catch (Exception ex) {
            request.setAttribute("message", "错误信息: " + ex.getMessage());
        }
        // 跳转到 message.jsp
        request.getRequestDispatcher("/jsp/message.jsp").forward(request, response);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

	结果:${message}
</body>
</html>

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JSPJavaServer Pages)文件上传与下载是在web开发中常用的功能,主要用于实现用户上传文件到服务器或下载服务器上存储的文件。 文件上传的过程主要分为以下几个步骤: 1. 前端页面显示上传表单,包括一个文件选择框和一个提交按钮。 2. 用户在文件选择框中选择要上传的文件。 3. 用户点击提交按钮后,前端将选择的文件发送到后台的JSP页面。 4. 后台的JSP页面通过request对象获取用户上传的文件,并将其保存到服务器的特定位置。 文件下载的过程主要分为以下几个步骤: 1. 前端页面提供下载链接或按钮。 2. 用户点击下载链接或按钮后,前端发送请求到后台的JSP页面。 3. 后台的JSP页面根据请求参数或其他逻辑,将需要下载的文件读取或获取到。 4. 后台将获取到的文件通过response对象返回给前端。 5. 前端接收到文件数据后,根据文件的MIME类型进行相应的处理,比如保存到本地或直接在浏览器中打开等。 在JSP页面中,通过使用servlet API提供的request和response对象,结合一些Java IO的API,可以实现文件上传和下载的功能。对于文件上传,需要注意在服务器端对文件大小、类型和异常处理进行合理的控制;对于文件下载,需要设置response的头部信息,以便浏览器正确识别文件类型并进行下载操作。 基于JSP文件上传与下载的实现,可以方便地实现一些常见的功能,比如用户上传头像、上传附件、下载文档等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuandfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值