首页 > 其他分享 >SpringMVC文件上传

SpringMVC文件上传

时间:2023-07-17 16:15:24浏览次数:38  
标签:文件 SpringMVC responseResult stringBuilder2 上传 append

相关依赖

使用 SpringMVC 提供的文件上传需要在项目中加入两个 jar 包,对应的 maven 的依赖分别是:commons-iocommons-fileupload

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

SpringMVC 配置文件

SpringMVC 的配置文件中需要注入 SpringMVC 支持文件上传的类 CommonsMultipartResolver 的 Bean,Bean 的 id 为 multipartResolver,该 id 是固定的,SpringMVC 在加载时会去容器查找该 id 的 Bean,若容器中存在该 id,则支持文件上传,若不存在,则不支持文件上传

前端异步请求文件上传

//html代码
图片上传:<input type="file" name="file1" multiple="multiple" id="file0" />
<img src="" id="img0">
<button id="ajax_upload">Ajax上传</button>

//js 代码
$("#file0").change(function () {
            var formData = new FormData();
            formData.append("file",document.getElementById("file0").files[0]);
            $.ajax({
                url : "ajaxUpload",
                data : formData,
                type : "post",
                contentType:false,
                processData:false,
                dataType : "json",
                success : function(response){
                    if(response.dataState == "success"){
                        // 为 src 属性设置上传文件的相对路径,实现文件预览
                        $("#img0").attr("src",response.responseMap["fileUrl"]);
                    }else{
                        alert(response.dataState);
                    }
                }
            });
        });

注意:ajax 发起文件上传的请求时需要将 contentTypeprocessType 都设置为 false

后台 controller 实现

使用 SpringMvc 实现文件上传时,Congtroller 需要指定 MultipartFile 类型的参数来接收前端传来的文件数据

@RequestMapping(value = "ajaxUpload",produces = {"text/html;charset=UTF-8;","application/json;"})
    @ResponseBody
    public ResponseResult ajaxUplod(ResponseResult responseResult, MultipartFile file, HttpServletRequest request){
        // 获取上传文件的原始名称
        String fileName = file.getOriginalFilename();
        // 获取上传文件的后缀名
        String ext = fileName.substring(fileName.lastIndexOf("."));
        // 获取当前项目资源文件的绝对路径
        StringBuilder stringBuilder1 = new StringBuilder(request.getSession().getServletContext().getRealPath("/"));
        String baseUrl = stringBuilder1.toString();
        // 设置本地文件的相对路径
        StringBuilder stringBuilder2 = new StringBuilder(File.separator);
        stringBuilder2.append("upload");
        stringBuilder2.append(File.separator);
        stringBuilder2.append(Calendar.YEAR);
        stringBuilder2.append("-");
        stringBuilder2.append(Calendar.MONTH);
        stringBuilder2.append("-");
        stringBuilder2.append(Calendar.DATE);
        stringBuilder2.append(ext);
        String fileUrl = stringBuilder2.toString();
        // 当前项目路径 + 文件存储的相对路径 = 上传文件存储的绝对路径
        File localFile = new File(stringBuilder1.append(stringBuilder2).toString());
        Map<String,Object> map = new HashMap();
        // 将文件的相对路径返回给前端实现文件预览
        map.put("fileUrl",fileUrl);
        if(!localFile.exists()){
            localFile.mkdirs();
        }
        try {
            file.transferTo(localFile);
            responseResult.setDataState("success");
            responseResult.setMsg("上传成功");
            responseResult.setResponseMap(map);
        } catch (IOException e) {
            responseResult.setDataState("fail");
            responseResult.setMsg("上传失败");
            e.printStackTrace();
        }
        return responseResult;
    }

注意:

  1. 若上传的文件只需保存在当前项目的目录中,可以使用上述方法,若需保存在单独的图片服务器中,则需要指定服务器的访问路径,该路径最好是写在配置文件中
  2. 单独将相对路径提取出来返回给前端是为了前端能预览上传的文件,若没有这种需求,可以忽略此步骤
  3. transferTo 方法是 springMVC 提供的复制文件的方法,该方法将file 文件的内容写入到指定的文件中去,省略来手动进行文件复制的流操作

标签:文件,SpringMVC,responseResult,stringBuilder2,上传,append
From: https://www.cnblogs.com/elementplay/p/17560374.html

相关文章

  • 字典,元组,元组内置方法、相关面试题 、 集合的内置方法 、字符编码 、文件操作 、函数
    字典的内置方法1.定义方式 d={'usernamne':"kevin"}#定义空字典d={}info=dict(username='kevin',age=18)#{'username':'kevin','age':18} print(info) #dic={#'name':�......
  • 员工管理系统、字符编码、文件操作
    员工管理系统#咱们目前做出来的系统肯定是不完善的,目的就是练习最近学习的相关知识点,里面存在的不合理或者不严谨的地方不要纠结快捷键:从一行直接换行到下一行>>>shift+entertab:往后缩进shift+tab:往前缩进字符编码前提:字符编码只跟文本数据和字符串有关系,它跟视频文......
  • 主题:文件相关操作
    文件的基本操作#三步骤 1.打开文件2.操作文件3.关闭文件关键字:open#f=open(r'a.txt','r',encoding='utf-8')#f=open(r'a.txt',mode='r',encoding='utf-8')#print(f)#操作系统打开的文件###操作文件:读、写#res=f......
  • 文件内指针的移动 、内数据的修改 、函数(次函数非数学中的函数)(非常重要)
    文件的操作模式"""1.如果是t模式,read里面写的数字代表的是读取的字符个数2.如果是b模式,read里面写的数字代表的是读取的字节个数3.一个字节代表一个英文字符4.一个中文字符使用三个字节保存"""#withopen('a.txt','r',encoding='utf8')asf:#......
  • Linux磁盘专题-linux文件系统详解
    这可是我几年前的杰作笔记呀.....当初手写计算都会,现在忘光光....物理硬盘Block的概念和作用硬盘底层一次IO就是读、写一次扇区,一个扇区默认是512Byte。读写大量文件如果以扇区为单位会很慢、性能不好,所以出现了逻辑块的概念(logicblock),也就是硬盘Block。逻辑块Block是......
  • 创建文件夹和删除问价夹的工具类
    一、对于文件夹的创建和删除工具类importcn.hutool.core.util.StrUtil;importlombok.extern.slf4j.Slf4j;importjava.io.File;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;/***@Description:*@Date:2023/6/3*@Auth......
  • 前端实现浏览器端大文件分片上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求         <formid="postForm"action="${pageContext.request.contextPath}/UploadServlet"method="post"e......
  • class文件的加载过程
    1、在加载class文件的时候,JVM会先加载类中的所有静态成员(方法,变量,静态代码块)都加载到方法区class文件的所处静态区中2、当把所有的静态成员加载完成之后,开始给类中的所有静态成员变量进行默认初始化3、当类中的所有静态成员变量默认初始化之后,接着开始给所有静态成员变量显示赋......
  • java执行jar文件
    如何在Java中执行JAR文件作为一名经验丰富的开发者,我很乐意教你如何在Java中执行JAR文件。执行JAR文件是一种常见的操作,它允许你在Java虚拟机(JVM)上运行打包好的Java应用程序。下面是整个过程的步骤概述:步骤描述1定位并获取JAR文件2创建一个执行JAR文件的运行配置......
  • java展示指定路径文件
    Java展示指定路径文件作为一名经验丰富的开发者,我将教会你如何使用Java展示指定路径下的文件。首先,我将向你展示整个流程,并提供每个步骤所需的代码以及这些代码的注释。流程下面是展示指定路径文件的流程:步骤描述步骤1获取指定路径步骤2遍历指定路径下的文件......