SpringMVC上传文件(二)

简介: SpringMVC上传文件

Controller层代码


package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
/**
 * @author Dream_飞翔
 * @email 1072876976@qq.com
 */
@Controller
public class MessController {
    @RequestMapping("uploadSecond")
  @ResponseBody
  public String upLoadSecond(MultipartFile file){
    System.out.println(file.getOriginalFilename());
    return "1";
    }
}

2、运行结果:


image.png

image.png

image.png

3、代码解析:


HTML代码


<table>
    <tr>
        <td>文件上传</td>
    </tr>
    <tr>
        <td>文件描述:</td>
        <td><input type="text" name="mess" id="mess"></td>
    </tr>
    <tr>
        <td>上传文件</td>
        <td><input type="file" name="file" id="upfile"></td>
    </tr>
    <tr>
        <td><input type="submit" onclick="checkFile()" value="上传"/></td>
    </tr>
</table>

与之前form表单上传文件的方式大致相同,不同点在于利用Ajax上传文件不需要使用form表单,但是在type类型为submit的<input>标签中需要添加一个单击事件,这个单击事件用于将用于处理要上传的文件

JavaScript代码


<script>
  // 在使用Ajax上传文件之前要先导入jQuery
    function checkFile() {
        var formData = new FormData();
        formData.append('file', $('#upfile')[0].files[0]);
        $.ajax({
            url:"/uploadSecond",
            type:"POST",
            data:formData,
            cache:false,
            processData:false,
            contentType:false,
            dataType: 'json',
            success:function (data) {
                if (data == "1")
                    alert("上传成功");
            },
            error:function (data) {
                if (data == "0")
                    alert("上传失败");
            }
        });
    }
</script>

需要注意的是在使用Ajax上传文件之前要先导入jQuery。

function checkFile() {
...
}

因为之前在<input>标签中添加了单击事件,添加的单击事件在这里进行定义做出怎样的处理

var formData = new FormData();

Ajax上传文件时传到后端的对象就是formData,也就是说我们是将这个formData对象传到了后端,所以在Ajax正式上传文件之前先声明formData对象

formData.append('file', $('#upfile')[0].files[0]);

在声明了一个formData对象以后,此时对象当中什么都没有,所以这个时候就要将想要上传的文件添加到formData对象中,append()方法中的第一个参数的意思为要添加到formData对象中的数据的类型为文件类型,第二个参数为文件对象,即$(’#file’)[0].files[0]就是我们要上传的文件。

$.ajax({
            url:"/uploadSecond",
            type:"POST",
            data:formData,
            cache:false,
            processData:false,
            contentType:false,
            dataType: 'json',
            success:function (data) {
                if (data == "1")
                    alert("上传成功");
            },
            error:function (data) {
                if (data == "0")
                    alert("上传失败");
            }
        });
    }
  1. $.ajax({…});为Ajax上传文件的标准形式,url对应的值为数据接口(就是后面要被Controller层中拦截的值)
  2. type提交方式为post,原因与form表单提交方式一致,在此不多做赘述
  3. data为提交的数据,此时我们将formData对象整体进行上传
  4. cache的值设置为false是因为上传文件不需要缓存
  5. processData的值设置为false是因为data值也就是我们要上传的数据是FormData对象,不需要对数据做出处理
  6. dataType的意思为返回值为json格式的数据
  7. success:如果上传成功就执行这个function,这个方法中的参数data就是Controller层中返回的json对象,如果返回的json对象的值为1就在页面弹出提示框显示上传成功
  8. error:与success的思路一致,如果上传失败就执行error后面的function,如果返回的json对象的值为0则弹出上传失败的提示框

Controller层代码


@RequestMapping("uploadSecond")
@ResponseBody
public String upLoadSecond(MultipartFile file){
  System.out.println(file.getOriginalFilename());
  return "1";
}

与form表单上传文件的代码思路一致,不同点在于返回前端的json对象的内容

总结


以上便是HTML界面如何上传文件的两种方式,本文用了一个简单的案例来讲述两种上传文件方法的原理,在理解了以后再回首看这些操作其实并没有那么复杂,但是在一开始没有静下心来认真的去理解一,所以才耗费了更多的时间。在此做一个记录,以后不允许自己再犯类似的错误,遇到问题时哪怕时间再紧张也要稳下来。再次感谢读者朋友能够看到这里,如果文章中有讲解不妥的地方欢迎在评论区指出,很高兴能够一起进步!

相关文章
|
22天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9199 29
|
20天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
4444 16
|
8天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
20天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
2397 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
7天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
563 1
|
1天前
|
存储 缓存 测试技术
QWT 3D 模块重构记:旧渲染管线改进介绍及实时瀑布图示例
QWT 3D模块完成重大重构:解耦窗口与图形(Plot+Item),摒弃OpenGL 1.x固定管线,迁至Core Profile着色器渲染;支持多图元同场景叠加,并以实时3D瀑布图验证——滑动窗口、固定色域、64帧×256点达61fps。兼容Qt 5.12+/6,LGPL协议。
151 120
|
9天前
|
人工智能 Linux Windows
千问办公(QwenWork)官网入口:其实有2个,一个是网页端千问办公,一个是介绍指南页面
千问办公(QwenWork)是阿里云推出的AI智能办公平台,支持网页端直接使用及Windows/Mac/Linux客户端下载。提供PPT生成、财报分析、网页搭建等AI功能,个人版免费,企业版198元/席/月。详情见官网qwenwork.cn或阿里云产品页。
1115 0
千问办公(QwenWork)官网入口:其实有2个,一个是网页端千问办公,一个是介绍指南页面
|
13天前
|
Windows
【保姆级】.NET Framework 3.5离线安装教程(2026最新实测)
.NET Framework 3.5是微软经典运行库,专为兼容老软件、老游戏设计。Win7自带,Win10/11需手动启用(在线或离线安装)。它与4.x系列并存不冲突,缺它会导致“找不到组件”报错。本文详解两种安装方式及常见问题解决,小白也能轻松上手。(239字)
1644 0
|
3天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
333 0

热门文章

最新文章