聊聊在Servlet中怎么上传文件

 更新时间:2021年05月15日 10:09:43   作者:你这家伙  
很多朋友不清楚在Servlet中怎么上传文件,谈到这个问题,首先需要我们掌握开发servlet的步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

首先对Servlet上传文件的简单理解

此前,Servlet本身没有对文件上传提供直接的支持,一般需要使用第三方框架来实现,这样就比较麻烦
不过,Servlet3.0之后提供了这个功能,而且使用非常简单,,为此,HTTPServletRequest提供了两个方法用于从请求中解析出上传的文件:

Part getPart(String name)  //获取请求中给定 name 的文件
Collection<Part> getParts() //获取所有的文件

其中每一个文件用一个javax.servlet.http.Part对象来表示,该接口提供了处理文件的简易方法,如write(),delete(),那么,结合 HttpServletRequest 和 Part 来保存上传的文件变得非常简单

Part img = request.getPart("img");
img.write("根路径+\\img.jpg")

注意:可以配合 @MultipartConfig 注解来对上传操作进行一些自定义的配置,比如限制上传文件的大小,以及保存文件的路径等,但是,如果请求的 MIME 类型不是 multipart/form-data,则不能使用上面的两个方法,否则将抛异常。

首先我们掌握开发Servlet的步骤:

前端:如果有前端内容的话,需要再写一个html文件
后端

  • 首先编写后台的Servlet代码(也即重写doGet和doPost方法)
  • 配置项目文件,web.xml里面的映射文件

1.首先写一个页面(前端) html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="img"><p>
    <input type="submit" value=" 提 交 ">
</form>
</body>
</html>

代码分析

在这里插入图片描述

2.写Servlet后端类代码

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;

//首先必须声明这个类是用来处理(文件)流的【不可获取】
@MultipartConfig
public class FileServlet extends HttpServlet {
    @Override
    //因为提交表单只需要post,那么这里就不需要get方法了
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //首先拿到流信息,他返回的是一个part对象
        Part part = req.getPart("img");
        //手下声明一个保存路径,这里保存在D盘的File文件下
        String filePath = "D:\\File\\";
        //保存文件的名称这里就和原文件的名称一样,通过part里面的方法得到原文件名称
        String fileName = part.getSubmittedFileName();
        //通过write方法,可以将这个png文件保存在任意路径下,write里面的参数,就是要保存的路径
        part.write(filePath+fileName);

        //然后给前端返回响应的结果
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>上传成功</h1>");
    }}

3.配置web.xml映射

<servlet>
    <servlet-name>fileServlet</servlet-name>
    <servlet-class>FileServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>fileServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>

4.效果展示

在这里插入图片描述

存在问题

那么哪里存在问题呢?

//首先拿到流信息,他返回的是一个part对象
        Part part = req.getPart("img");
        //手下声明一个保存路径,这里保存在D盘的File文件下
        String filePath = "D:\\File\\";
        //保存文件的名称这里就和原文件的名称一样,通过part里面的方法得到原文件名称
        String fileName = part.getSubmittedFileName();
        //通过write方法,可以将这个png文件保存在任意路径下,write里面的参数,就是要保存的路径
        part.write(filePath+fileName);

注意:其实这里是存在一点问题的

在这里插入图片描述

那么如何进行改进呢?

方法:使用UUID作为文件名

在这里插入图片描述

代码改进:也就是把代码中的fileName改成如下

//首先需要一个文件名,改进文件名的名称(防止重复名称覆盖之前的文件)
        String fileName = UUID.randomUUID().toString()+
                part.getSubmittedFileName().substring(part.getSubmittedFileName().indexOf("."));

结果验证

在这里插入图片描述

以上就是聊聊在Servlet中怎么上传文件的详细内容,更多关于Java Servlet上传文件的资料请关注脚本之家其它相关文章!

相关文章

  • 解读@Transactional失效的几种情况

    解读@Transactional失效的几种情况

    这篇文章主要介绍了@Transactional失效的几种情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 使用Spring静态注入实现读取配置工具类新方式

    使用Spring静态注入实现读取配置工具类新方式

    这篇文章主要介绍了使用Spring静态注入实现读取配置工具类新方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java中enum的用法

    java中enum的用法

    这篇文章主要介绍了java中enum的用法,包括了枚举类型的基本定义及用法分析,对于学习Java有着一定的学习与借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 单元测试 @mock与@SpringBootTest的使用

    单元测试 @mock与@SpringBootTest的使用

    这篇文章主要介绍了单元测试 @mock与@SpringBootTest的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java中LinkedList的模拟实现

    Java中LinkedList的模拟实现

    本文主要介绍了Java中LinkedList的模拟实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • java将word转pdf的方法示例详解

    java将word转pdf的方法示例详解

    这篇文章主要介绍了java将word转pdf的相关资料,文中讲解了使用Aspose-Words工具将Word文档转换为PDF的优劣,并提供了一种在Java项目中使用Aspose-Words进行Word转PDF的示例方法,需要的朋友可以参考下
    2025-01-01
  • SpringBoot用JdbcTemplates操作Mysql实例代码详解

    SpringBoot用JdbcTemplates操作Mysql实例代码详解

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错,这篇文章主要介绍了SpringBoot用JdbcTemplates操作Mysql
    2022-10-10
  • Spring cloud gateway工作流程原理解析

    Spring cloud gateway工作流程原理解析

    这篇文章主要介绍了Spring cloud gateway工作流程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Struts2中图片以base64方式上传至数据库

    Struts2中图片以base64方式上传至数据库

    这篇文章主要介绍了Struts2中图片以base64方式上传至数据库的实现代码,代码分为前台和后台两段,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Lambda表达式的使用及注意事项

    Lambda表达式的使用及注意事项

    这篇文章主要介绍了Lambda表达式的使用及注意事项,主要围绕 Lambda表达式的省略模式 Lambda表达式和匿名内部类的区别的相关内容展开详情,感兴趣的小伙伴可以参考一下
    2022-06-06

最新评论