Java接收前端上传文件,保存文件到本地,并将相关信息存储如数据库,最后用JavaScript将上传文件信息在前端展示

MyBatis整体架构分析:基础支持层、核心处理层和接口层 欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 MyBatis 的整体架构分为三层, 分别是基础支持层、核心处理层和接口层,如下图所示。 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元... 阅读详情

直接上运行效果


注意事项(代码较多,放在后面)

  1. 导入 .jar包 ,使用Maven时,不需要手动导入 jar包 ,在pom.xml文件中加入依赖即可,加入之后点击右侧Maven图标,并按刷新按钮,Maven会自动更新和下载jar包(如图)

  1. 有些需要本地导入的jar包,操作方法如下:
  •  将jar包导入Maven本地仓库,然后可以在项目中使用

 在cmd窗口中输入下面的代码,即可将jar包导入本地仓库

mvn install:install-file 
-Dfile=G:\File\JavaTool_File\jar\common-fileUpLoad\commons-fileupload-1.4.jar 
-DgroupId=RedMaple 
-DartifactId=FileUpLoad.sources 
-Dversion=1.0 
-Dpackaging=jar

Dfile 为绝对路径

DgroupId,DartifactId,Dversion 分别对应pom.xml文件中的groupId,artifactId,version

Dpacking=jar 照抄,注意D前面都有 - 号

成功后,就在pom.xml的 dependency中加入如下内容即可

<dependency>
      <groupId>RedMaple</groupId>
      <artifactId>Commons.lang3</artifactId>
      <version>1.0</version>
</dependency>

关于Java接收上传文件具体内容

  • 需要引入的依赖
<!--Common-FileUpLoad包-->
<dependency>
    <groupId>RedMaple</groupId>
    <artifactId>FileUpLoad.sources</artifactId>
    <version>1.0</version>
</dependency>
<!--Common-Io包-->
<dependency>
   <groupId>RedMaple</groupId>
   <artifactId>Commons.Io</artifactId>
   <version>1.0</version>
</dependency>
// Servlet 文件上传
public class UploadServlet extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws IOException, ServletException {
        res.setContentType("text/plain;charset=UTF-8");
        PrintWriter pw = res.getWriter();
        try{

            DiskFileItemFactory diskFactory = new DiskFileItemFactory();

            // threshold 极限、临界值,即硬盘缓存 1M
            diskFactory.setSizeThreshold(4 * 1024);

            // repository 贮藏室,即临时文件目录
            diskFactory.setRepository(new File("G:\\File\\Temp_File"));

            ServletFileUpload upload = new ServletFileUpload(diskFactory);

            // 设置允许上传的最大文件大小 4M
            upload.setSizeMax(4 * 1024 * 1024);

            // 解析HTTP请求消息头(得到请求参数的集合)
            List<FileItem> fileItems = upload.parseRequest(req);

            // 进行迭代
            Iterator<FileItem> iter = fileItems.iterator();
            while(iter.hasNext())
            {
                FileItem item = (FileItem)iter.next();
                
                // 判断是否是普通表单
                if(item.isFormField())
                {
                    // 是普通表单
                    System.out.println("处理表单内容 ...");
                    processFormField(item, pw);
                }else{
                    // 不是普通表单
                    System.out.println("处理上传的文件 ...");
                    processUploadFile(item, pw);
                }
            }
        }catch(Exception e){
            System.out.println("使用 fileupload 包时发生异常 ...");
            e.printStackTrace();
        }finally{
            pw.close();
        }
    }
    
    // 处理表单内容
    private void processFormField(FileItem item, PrintWriter pw) throws Exception {
        String name = item.getFieldName();    // 获取参数名称
        String value = item.getString();      // 获取值
    }

    // 处理上传的文件
    private void processUploadFile(FileItem item, PrintWriter pw) throws Exception {

        // 不同浏览器得到的getName()是不一样的,是否要加工再具体讨论
        // 有的是绝对路径有的是文件名
        String filename = item.getName();
        
        // 获取文件大小
        long fileSize = item.getSize();
        
        // 创建一个接收该文件的文件模板
        File uploadFile = new File("G:\\File\\Txt_File" + "/" + filename);

        //将文件读取并写入模板中
        item.write(uploadFile);
    }
}

用到的Gson类

  • 要用到的依赖
<dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.3</version>
</dependency>
// 将 filesArrayList对象 变为 Json字符串
Gson gson = new Gson();
json = gson.toJson(filesArrayList);

最后,使用了Maven的pom.xml 文件之后,似乎不需要WEB-INF文件夹下的lib文件夹来存放jar包了。(刚用Maven不久,只是猜测,有人会的话可以评论教教我) 


核心代码

接收并将文件信息存入数据库

// Servlet 文件上传
public class UploadServlet extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws IOException, ServletException {

        res.setContentType("text/html;charset=utf-8");
        PrintWriter pw = res.getWriter();
        try{
            DiskFileItemFactory diskFactory = new DiskFileItemFactory();
            // threshold 极限、临界值,即硬盘缓存 1M
            diskFactory.setSizeThreshold(4 * 1024);
            // repository 贮藏室,即临时文件目录
            diskFactory.setRepository(new File("G:\\File\\Temp_File"));
            ServletFileUpload upload = new ServletFileUpload(diskFactory);
            // 设置允许上传的最大文件大小 1G
            upload.setSizeMax(1024 * 1024 * 1024);
            // 解析HTTP请求消息头
            List<FileItem> fileItems = upload.parseRequest(req);
            Iterator<FileItem> iter = fileItems.iterator();
            while(iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if(!item.isFormField()){
                    System.out.println("处理上传的文件 ...");
                    processUploadFile(item,pw,req,res);
                }
            }
        }catch(Exception e){
            System.out.println("使用 fileupload 包时发生异常 ...");
            e.printStackTrace();
        }finally {
            pw.close();
        }
    }// end doPost()

    // 处理上传的文件
    private void processUploadFile(FileItem item, PrintWriter pw,HttpServletRequest req
                ,HttpServletResponse res) throws Exception {
        // 此时的文件名包含了完整的路径,得注意加工一下
        String fileName = item.getName();
        int index = fileName.lastIndexOf(".");
        String extension = fileName.substring(index+1,fileName.length());
        long fileSize = item.getSize();
        String filePath = "G:\\File\\Temp_File" + "/" + fileName;
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String time = sdf.format(date);
        File uploadFile = new File(filePath);
        item.write(uploadFile);
        Files files = new Files(fileName,String.valueOf(fileSize),filePath,time);
        addFile(files);
        req.getRequestDispatcher("T03.jsp").forward(req,res);
    }

    private void addFile(Files files){
        Connection conn = Mysql.connection("filesys");
        String sql = "insert into file(filename,filesize,filepath,time) values(?,?,?,?);";
        PreparedStatement ps = Mysql.prepareStatement(conn,sql);
        Mysql.setString(ps,1,files.fileName);
        Mysql.setString(ps,2,files.fileSize);
        Mysql.setString(ps,3,files.filePath);
        Mysql.setString(ps,4,files.time);
        Mysql.executeUpdate(ps);
        Mysql.close(conn,ps);
    }
}

 读取数据,并将数据以Json格式发送给前端AJAX

public class GetDate extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException{
        String[] filesArrayList = new String[100];
        boolean flag = findFile(filesArrayList);
        String json = "{:}";
        if(flag){
            Gson gson = new Gson();
            json = gson.toJson(filesArrayList);
        }
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();
        pw.println(json);
    }

    private boolean findFile(String[] filesArrayList){
        boolean flag = false;
        Connection conn = Mysql.connection("filesys");
        String sql = "select * from file;";
        PreparedStatement ps = Mysql.prepareStatement(conn,sql);
        ResultSet rs = Mysql.executeQuery(ps);
        int i = 0;
        while(Mysql.next(rs)){
            String fileName = Mysql.getString(rs,"filename");
            String fileSize = Mysql.getString(rs,"filesize");
            String filePath = Mysql.getString(rs,"filepath");
            String time = Mysql.getString(rs,"time");
            Files files = new Files(fileName,fileSize,filePath,time);
            Gson gson = new Gson();
            filesArrayList[i++] = gson.toJson(files);
            flag = true;
        }
        Mysql.close(conn,ps);
        return flag;
    }
}

AJAX和JQuery联用,将文件信息在前端展示 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <script type='text/javascript' src='jQuery-3.6.js'></script>
    <script>
        $(function(){
            var data = '';
            var num = 1;
            $.get("get",data,function(resp){
                $.each(resp,function(i,file){
                    if(file!=null){
                        var json = JSON.parse(file);
                        var index = json.fileName.lastIndexOf(".");
                        var extension = json.fileName.substring(index,json.fileName.length);
                        $("table").append(
                            "<tr>" +
                            "<td>" + (num++) +"</td>" +
                            "<td>" + json.fileName+"</td>" +
                            "<td>" + extension +"</td>" +
                            "<td>" + json.fileSize+"</td>" +
                            "<td>" + json.filePath+"</td>" +
                            "<td>" + json.time+"</td>" +
                            "<td>" + json.fileName+"</td>" +
                            "</tr>"
                        );
                    }
                })
            },"json");
        })
    </script>
    <style>
        table{
            margin-top:10px;
            border:1px black solid;
        }
        .tableTitle{
            width:150px;
            background-color: rgb(130, 113, 204);
            color:white;
            font-size:17px;
        }
        td{
            text-align:center;
            outline: 1px white solid;
            background-color: rgb(222,223,222);
        }
    </style>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
    上传文件列表:
    <input type='file' id='file' name="file">
    <input type='submit' value='上传'>
</form>
<table>
    <tr>
        <td class='tableTitle'>自动序列</td>
        <td class='tableTitle'>文件名</td>
        <td class='tableTitle'>扩展名</td>
        <td class='tableTitle'>文件大小</td>
        <td class='tableTitle'>文件路径</td>
        <td class='tableTitle'>上传时间</td>
        <td class='tableTitle'>备注说明</td>
    </tr>
</table>
</body>
</html>

相关配置信息

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--加入Servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
    </dependency>
    <dependency>
      <groupId>RedMaple</groupId>
      <artifactId>FileUpLoad</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>RedMaple</groupId>
      <artifactId>FileUpLoad.sources</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>RedMaple</groupId>
      <artifactId>Commons.Io</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>RedMaple</groupId>
      <artifactId>Mysql</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.3</version>
    </dependency>
    <dependency>
      <groupId>RedMaple</groupId>
      <artifactId>Commons.lang3</artifactId>
      <version>1.0</version>
    </dependency>
</dependencies>

Java中如何实现保存文件到本地 我们可以将FileOutputStream和BufferedOutputStream结合使用来保存文件到本地。我们可以使用它来创建一个文件输出流,并将数据写入到文件中。通过上述的三种方法,我们可以在Java中实现将文件保存到本地。根据具体的需求和场景,选择适合的方法来进行文件保存操作。在Java中,我们可以使用各种方法来保存文件到本地。下面我将介绍几种常见的实现方式,并附上相应的源代码示例。方法,该方法接受文件的字节数组数据和文件路径作为参数。包中提供了Files类,它提供了一组用于操作文件的静态方法。 阅读详情

相关推荐

海康安防平台接口调试指南:从签名生成到Vue项目集成

本文详细解析了海康安防平台接口认证规则,从签名生成到Vue项目集成的完整流程。通过核心机制解析、签名工具使用技巧及Vue项目中的优雅集成方案,帮助开发者高效完成接口调试,避免常见问题。特别适合需要将海康安防平台接口集成到Vue项目中的开发者参考。

weixin_42533120的博客 438

Java后台接收前端数据的三种请求方式:url、与application/json

Java后台接收前端数据的三种请求方式

weixin_45863130的博客 3838

低功耗蓝牙技术 > GAP和GATT介绍

GAP和GATT作为蓝牙协议栈中的关键协议,为BLE设备之间的通信提供了标准和框架。GAP主要负责设备的连接、广播和角色定义,而GATT则定义了BLE设备之间的具体通信方式,通过Services和Characteristics实现数据的传输和交换。在蓝牙技术的发展中,GAP和GATT两个协议扮演着关键的角色,为BLE(低功耗蓝牙)设备之间的通信提供了规范和框架。GATT连接是建立在GAP协议之上的,是一种独占连接,一个BLE外设同时只能连接一个中心设备。连接建立后,通信是双向的,不同于GAP的单向通信。

DL_62532的专栏 4031

接收前端传过来的图片文件,并保存到电脑磁盘中

直接上代码:.......

weixin_64772672的博客 1823

OpenClaw对接本地大模型:Llama3/Qwen/ChatGLM全适配,完全私有化部署

OpenClaw对接本地大模型,是企业级AI智能体落地的必经之路——它不仅解决了数据隐私和合规问题,还能大幅降低成本、提升响应速度、实现定制化。这篇文章我给大家完整拆解了两套部署方案:Ollama(新手首选,5分钟搞定)和vLLM(生产环境首选,高性能),覆盖了Llama3/Qwen/ChatGLM三大主流模型,还有真实的落地案例、高级优化、踩坑避坑指南,看完你就能零代码完成完全私有化的部署。从零开发自定义工具,给OpenClaw添加专属业务能力;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 808

Jupyter notebook教程系列(二)Jupyter notebook的基本用法

Jupyter notebook的基本使用   一. 主页面 如图1-1 我们先介绍一下主页面上的内容: 1.Files页面是用于管理创建文件相关类目的。 2.Running页面主要展示的是当前正在运行当中的终端和“ipynb”格式的notebook。若想要关闭已经打开的终端和“ipynb”格式的notebook,仅仅关闭其页面是无法彻底退出程序的,需要在Running页面点击其对...

dlhlSC的博客 1438

java实现前端传递文件,后端接收保存在本地

java实现前端传递文件,后端接收保存在本地

weixin_59244784的博客 1774

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1368

java后端发送图片给前端+接收前端文件保存到指定路径下

代码】java后端发送图片给前端+接收前端文件保存到指定路径下。

goxingman的博客 4527

【yolo】YOLOv8模型导出完全指南:从PT到ONNX及其他格式的完整实践

摘要:本文全面介绍了YOLOv8模型从PT格式导出为ONNX等部署格式的完整流程与最佳实践。重点解析了关键参数(如format、imgsz、simplify)的作用机制,特别强调输入尺寸imgsz会自动继承训练尺寸的特性,并提供了ONNX、TensorRT等格式的典型导出配置方案。文章还总结了常见问题解决办法,推荐使用simplify优化模型性能,同时分享了通过C#实现模型重命名的实用技巧。最后指出"训练决定能力,导出定义接口"的核心原则,帮助开发者高效完成模型部署转换。

songhuangong123的博客 1917

PCL 将对象模板与点云对齐【2025最新版】

PCL模版匹配算法的使用案例,博客长期更新,本文最近更新时间为:2025年1月18日。

点云侠的博客 5378

Java springboot接收文件流并保存至本地

使用 MultipartFile 接收文件流。

weixin_52831324的博客 5276

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

总结springboot项目中一些后端接收前端传参的方法

body:

m0_51963973的博客 6337

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

后台接收前端文件图片

前端代码为: <form action="/userSave" method="post" enctype ="multipart/form-data"> 用户名:<input type="text" name="userName" autofocus required placeholder="NAME"> 密&nbsp;码&a

qxl288882的博客 6804

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

问题记录:Java后台接收前端jsp传过来的Base64格式的图片数据转换成图片并保存

代码: @RequestMapping(value="/xxxxx", method = {RequestMethod.POST}) public Map<String, String> SAVEBANNER(HttpServletRequest request){ Map<String, String> map = new HashMap<Stri...

qq_41953178的博客 3690

Java前端图片保存到本地

服务接口 import org.springframework.web.multipart.MultipartFile; /** * 文件服务 * * @author Zhenfeng Li * @version 1.0 * @date 2020-11-23 14:17 */ public interface FileService { /** * 保存/更新图片 * * @param multipartFile 图片 * @param ba

CleanCode的博客 1230

web前端上传图片到Java后端,并保存到本地

web前端上传图片到Java后端,并保存到本地 /** * 上传图片 * @param file * @return */ @RequestMapping(value = "/uploadFile") @ResponseBody // 参数:(图片名称,图片(不进行特殊处理))前端统一放到file中,传给后端 public JsonResult uploadFile(@RequestParam("file") MultipartFile

sunshtwe的博客 5834

web上传zip大文件,java服务接收并解压ZIP文件

web页面使用 ajax 的方式上传大文件(ZIP),java服务接收文件并解压zip。解压组件使用 zip4j 实现,api使用简单。并且解决linux系统上解压出的中文乱码问题。

java_chc的博客 4158

保存File文件到本地

保存MultipartFile文件到本地,如果文件已经存在则覆盖

qq_43205267的博客 6978

前端传file文件和json报文到java后端处理

前端传file文件和json报文到java后端处理(现有架构中的post过滤器只能处理json报文格式)

佐小锘 4966

java 接收上传的附件(文件)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = null; try { out = response.getWriter(); out.println(" 上传成功 ")...

qq_15508731的博客 2771

java前端上传文件保存到本地文件夹

System.out.println("执行成功");System.out.println("执行失败");

weixin_61621434的博客 791

JAVA前端上传文件后端接收文件并保存在本地

在一些情境下,用户通过浏览器上传word、excel、pdf等各种类型的文件到系统,上传后可以随时下载。下载文件可以通过虚拟路径的方式访问虚拟路径通过浏览器下载;也可以后端直接发送文件流给前端完成下载。

普通还不自信的程序员 2914

Java中接收前端请求参数的详细方法和最佳实践

本文介绍了Java中接收前端请求参数的详细方法,包括通过Servlet、Spring MVC、JSP/Servlet技术等。同时,也提到了最佳实践,包括验证参数有效性、对敏感信息进行加密或隐藏、使用合适的字符编码以及对异常情况进行处理。在实际开发中,根据具体情况选择合适的方法,并遵循最佳实践可以提高应用程序的质量和安全性。

weixin_45913657的博客 1562

前端传来的图片并保存_Java 接收并上传前端传来的 form 表单提交的图片文件到另一个接口...

OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.parse("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");RequestBody body = RequestBody.create(mediaType, "...

weixin_39657249的博客 636
上一篇: JavaScript实现日历功能
下一篇: MySQL中存储过程 delimiter问题
The_RedMaple
博客等级 码龄7年 375粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值