博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC 文件上传
阅读量:7308 次
发布时间:2019-06-30

本文共 3428 字,大约阅读时间需要 11 分钟。

hot3.png

相关依赖

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

commons-io
commons-io
2.4
commons-fileupload
commons-fileupload
1.3.1

springMVC 配置文件

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


前端异步请求文件上传

//html代码图片上传://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 发起文件上传的请求时需要将 contentType 和 processType 都设置为 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
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 文件的内容写入到指定的文件中去,省略来手动进行文件复制的流操作

转载于:https://my.oschina.net/u/4132929/blog/3054242

你可能感兴趣的文章
[译] 支撑现代存储系统的算法
查看>>
热修复初探
查看>>
leetcode刷题记之76 Minimum Window Substring
查看>>
【Nodejs篇五】Node js 使用 superagent 与 cheerio 完成简单爬虫
查看>>
[译]React高级话题之Render Props
查看>>
前端菜鸟之SASS入门笔记
查看>>
熔断Hystrix使用尝鲜
查看>>
OAuth 2.0协议在SAP产品中的应用
查看>>
树的重心
查看>>
快速搭建你的 github pages 个人博客 —— 基于 Create-React-App 的单页面应用实践...
查看>>
NPM酷库:winston 多路日志记录
查看>>
vue中的methods、computed和watch
查看>>
js 中的基本类型,引用类型,基本包装类型
查看>>
【341天】我爱刷题系列100(2018.01.12)
查看>>
arch linux安装过程
查看>>
Word强大插件Writage使用手册
查看>>
CentOS7下PHP7.2安装redis扩展
查看>>
聊聊FilterSecurityInterceptor
查看>>
让数据库变快的10个建议
查看>>
Spring Boot 揭秘与实战
查看>>