spring文件上传

#spring文件上传

  1. WEB-INF:相对安全的文件夹,前端资源存放在WEB-INF中时,前端浏览器不能直接访问,但是可以通过后端返回,优势就是可以通过后端进行控制。

  2. 视图解析器:

    将页面存放在WEB-INF中,经过后端控制会更安全,每次每次都要写重复的前缀后缀比较麻烦,所以可以配置视图解析器

    <!--视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <!--后缀-->
        <property name="suffix" value=".html"></property>
    </bean>
    
    @Controller
    @RequestMapping("/index")
    public class IndexController {
        
        @RequestMapping("/hello")
        public String hello(){
            System.out.println("hello world");
    //        return "/WEB-INF/pages/hello.html"; //当页面比较多时,每次都要写重复的
    //        前缀后缀比较麻烦,所以配置视图解析器
            return "hello"; //配置了前缀和后缀的视图层
        }
    }
    
  3. 文件上传

    • 步骤
      <!-- commons-fileupload -->
      <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
      </dependency>
      <!-- commons-io -->
      <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
      </dependency>
      <!-- javax.servlet-api:只是为了获取request用的,跟上传没有直接关系 -->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
      </dependency>
      
    • 配置文件上传解析器
      <!--上传文件解析器-->
      <bean  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          
      </bean>
      
    • 代码实现

      user_form.html

      <!--表单文件上传:
              1. 请求方式为post
              2. enctype="multipart/form-data"
      -->
      <form action="/day5/submit_form" method="post" enctype="multipart/form-data">
          账号: <input type="text" name="userName"><br>
          密码: <input type="password" name="userPassword"><br>
          上传头像: <input type="file" name="userImagepath"><br>
          <input type="submit" value="提交">
      </form>
      

      UploadController

      @Controller
      public class UploadController {
      
          /**
           * 访问user_form.html
           */
          @RequestMapping("/user_form")
          public String userForm(){
              return "user_form";
          }
          /**
           * 1. 接收表单的普通参数:账号和密码
           * 2. 将文件上传到服务器
           *
           * 参数User:接收账号和密码,User的文件上传路径属性不要跟前端文件上传的name一致⭐⭐⭐⭐⭐
           * 参数userImagepath:设置为MultipartFile(文件上传类型),参数名字根前端文件上传的name一致⭐⭐⭐⭐⭐⭐
           */
          @RequestMapping("/submit_form")
          @ResponseBody
          public String submitForm(User user, MultipartFile userImagepath, HttpServletRequest request){
              System.out.println(user);
              //1. 获取文件原始名字
              String filename = userImagepath.getOriginalFilename();
              //2. 获取项目在服务器上的根路径
              //D:\student\chengshixueyuan_code\day5\target\day5\111.jpg
              // target中的项目是部署到服务器上之后编译之后的项目
              String realPath = request.getServletContext().getRealPath("/");
              System.out.println(realPath);
              //2. 文件长传
              try {
                  userImagepath.transferTo(new File(realPath+filename));
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return "success";
          }
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值