9月23日Spring笔记

标签

java

后端

spring

springMVC

文件上传

发布时间:

本文字数:302 字 阅读完需:约 3 分钟

springmvc文件上传

前端实现

前端使用bootstrap

file.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传</title>
    <meta charset="UTF-8">
    <title>日志记录</title>
    <script src="../js/jquery-2.1.0.js"></script>
    <script src="../js/bootstrap.min.js"></script>
    <script src="../js/docs.min.js"></script>
    <link link rel="stylesheet" href="../css/bootstrap.min.css">
    <script>
        $(()=>{
            $("#import").click(function () {
                let files = $('#csv_file').prop('files');
                let data = new FormData();
                data.append('myFile', files[0]);

                $.ajax({
                    type: 'POST',
                    url: "myFile.action",
                    data: data,
                    cache: false,
                    processData: false,
                    contentType: false,
                    success: function (ret) {
                        alert(ret);
                    }
                });
            });
        })
    </script>
</head>
<body>
    <form role="form" action="myFile.action" method="post" enctype="multipart/form-data">
        <div class="form-group">
            <label>选择文件</label>
            <input type="file" name="myFile">
        </div>
        <button type="submit" class="btn btn-default">上传</button>
    </form>
    <div>
        <h3>ajax上传文件</h3>
        <div class="form-group">
            <form role="form" action="myFile.action" method="post" enctype="multipart/form-data">
            <p>选择文件<input type="file" id="csv_file" name="myFile"/></p>
                <button id="import" type="button">上传</button>
            </form>
        </div>
    </div>
</body>
</html>

后端

spring-mvc.xml配置

<!-- 此处必须有id属性 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
    </bean>

WorkController.java

    @GetMapping("/file.action")
    public String file(){
        return "file";
    }

    @ResponseBody
    @PostMapping("/myFile.action")
    public String myFile(MultipartFile myFile){
        System.out.println(myFile);
        return myFile.getContentType();
    }

拦截器

implements HandlerInterceptor接口

preHandle: 前置拦截

spring-mvc.xml

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <!-- 排除不适用拦截器的路径 -->
            <mvc:exclude-mapping path="/user/login.action"/>
            <mvc:exclude-mapping path="/work/**"/>
            <bean class="com.zr.interceptor.SessionInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

SessionInterceptor.java

package com.zr.interceptor;

import com.alibaba.fastjson.JSON;
import com.zr.utils.AjaxResult;
import com.zr.vo.User;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class SessionInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        System.out.println(handler);
        //判断是否为ajax请求,默认不是
        String header = request.getHeader("x-requested-with");


        User user = (User)request.getSession().getAttribute("user");
        if(user==null||user.getUserId()==null||user.getUserId().equals("")){
            System.out.println("未登录");
            if(StringUtils.hasLength(header) && header.equals("XMLHttpRequest")){
                response.setContentType("text/html;charset=utf-8");
                response.setCharacterEncoding("utf-8");
                PrintWriter o = response.getWriter();
                o.write(JSON.toJSONString(AjaxResult.fail(200, "用户未登录",null)));
            }
            else{
                response.sendRedirect(request.getContextPath()+"/user/login.action");
            }

            return false;
        }
        return true;
    }
}

web.xml :设置session失效时间

  <session-config>
<!--    session失效时间:15分钟-->
    <session-timeout>15</session-timeout>
  </session-config>