SpringMvc上传文件(详细)

前言

这里讲解SpringMvc如何上传文件 ,较详细,一步一步分析。


一、准备工作

1.在前端写一个form表单,用于上传并提交文件

//该文件为index.html
<form th:action="@{/upfile}" method="post" enctype="multipart/form-data">
        上传文件<input type="file" name="file">
        <input type="submit"value="上传">
</form>

①.这里method 必须为post  且必须要有enctype="multipart/form-data"将文件转化为二进制形式

②.input的 type属性值为file 表示上传文件

③.th:action="@{/upfile}" 表示上传到的路径为 :项目名/upfile  

2.后端控制层

@PostMapping("/upfile")
public String upfile(MultipartFile file, HttpSession session) throws IOException {

    System.out.println(file);
    return "index"// 回到index.html页面,  index为逻辑视图

}

这里获取文件用的MultipartFile类型 

二、正式开始(从后端获取到客户端上传的文件)

        此时运行项目,并上传一个文件,查看IDEA运行界面

         发现其file为null,并未获取到客户端传过来的文件。(前端input name = 'file' 这里 参数名也为file 表明参数对应关系是正确的)

原因:①需要在pom.xml添加依赖:

<!--文件上传-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

        ②在SpringMvc 配置文件配置文件上传器  id必须设置为multipartResolver

<!--    配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

此时运行并上传一个文件(如图片)后,查看IDEA界面,发现file能获取到文件。


三、将获取到的文件上传到指定位置

@PostMapping("/upfile")
public String upfile(MultipartFile file, HttpSession session) throws IOException {
//  查看是否获取到文件
    System.out.println(file);
//  用session来获取应用域
    ServletContext servletContext = session.getServletContext();
//  通过应用域 获取的是target/项目名的真实路径
    String reath = servletContext.getRealPath("static/img");
//  获取上传的文件的文件名
    String filename = file.getOriginalFilename();
//  创建目录
    File fileDir = new File(reath);
    if (!fileDir.exists()){//判断目录是否存在,不存在就创建
        fileDir.mkdir();
    }
//  设置上传文件真实保存路径
    String finalPath = reath + File.separator +filename;
//  用 '文件保存的路径' 创建的一个文件  
    File file_ = new File(finalPath)
//    transferTO 将文件转移,将左边的文件内容转移到右边的文件里
    file.transferTo(file_);
    return "index";//返回到  index.html页面
    }

① servletContext.getRealPath("static/img"); 

         servletContext.getRealPath(“”) ; 返回的是当前项目所运行的traget包里的项目在本地的路径:如: d:\xxx\xxx\项目名\target\项目名

        servletContext.getRealPath("static/img");  返回 d:\xxx\xxx\项目名\target\项目名\static\img

② File.separator 是文件分隔符 ,便于适配不同的系统

③其余解释都在代码里 

 四.运行查看结果

1.先点开target包下,所准备好要上传到的具体路径

2、运行代码, 在IDEA查看运行代码和图片上传位置

 

 上传成功!


总结

在SpringMvc中上传文件的准备工作和重点注意细节:

        1.加入对应依赖  2.在SpringMvc配置文件中配置文件上传器(bean的id为multipartResolver)  

        3.后端接收的文件类型为MultipartFile

        4.前端form method为post 且需要加上enctype="multipart/form-data"

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值