springboot04學習踩坑記錄

静态资源,如果不设置,是可以直接访问的,例如
http://localhost:8080/test.jpg

但是我们可以设置static中的静态资源访问控制格式
aplications里面写

spring.web.static-path-pattern=/images/**
spring.web.resources.static-location=classpath:/static

这样就只能通过images路径访问
(classpath是target自动完成的
static一般就够用了

文件上传远离:
表单的enctype属性 规定在发送到服务器之前应该如何对表单进行编码。
例如enctype="application/x-www-form-urlencoded"默认时,表单的数据格式默认是key=value
当enctype="multipart/form-data"时,传输格式如

但是springboot默认文件配置最大为1MB,单次请求文件总数不能超过10MB
所以可能需要加入配置,修改最大限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

同时,当enctype="multipart/form-data"时,可以使用MultipartFile获取文件数据,再利用transferTo写入磁盘

在这里插入图片描述

HttpServletRequest 这个类非常常用可以通过自带的方法获取我们需要的信息

这里如果版本不对,会淘汰getrealpath方法,我这个是跑得通的

@RestController
public class FileUploadController {
    @PostMapping("/upload")
    //RequestMapping(value = "/upload",method = RequestMethod.POST)
    public String up(String username, MultipartFile photo, HttpServletRequest request) throws IOException {
        System.out.println(username);
        System.out.println(photo.getOriginalFilename());
        System.out.println(photo.getContentType());
        System.out.println(System.getProperty("user.dir"));
        String path = request.getSession().getServletContext().getRealPath("/upload/");
        //String path = request.getServletPath().getRealPath("/upload/");
        System.out.println(path);
        saveFile(photo,path);//自己定义的方法
        return "上传成功";
    }

    public void saveFile(MultipartFile photo, String path) throws IOException {
        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdir();
        }
        File file = new File(path + photo.getOriginalFilename());
        photo.transferTo(file);
    }
}

运行后,会有一些输出
用户名,
文件名,
文件类型,
不清楚,好像是本地路径
服务器存储文件路径
我们的函数就是拼接路径和文件名称,存储到目录

123123123
a.jpg
image/jpeg
E:\ideaproject\test0115
C:\Users\lenovo\AppData\Local\Temp\tomcat-docbase.8080.14760525501283808849\upload\

这里的C:\Users\lenovo\AppData\Local\Temp\tomcat-docbase.8080.14760525501283808849\upload\

就是服务器自己真实存储的路径
配置文件修改参数,用户就可以直接访问,但是由于开发阶段可能服务器存储路径会变,所以每次上传可能会不同,因此需要重新上传就能访问.不过在开发完成后这个路径应该是固定的
spring.web.resources.static-locations=/upload/

localhost:8080/a.jpg

拦截器
用户请求先经过拦截器,
prehandle,posthandle,aftercomletion
就是请求前,post,完成后

我们可以重写他的方法完成我们自己的功能
参数标黄,查了一下https://blog.csdn.net/u010234516/article/details/121830953

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Nonnull;
//import org.springframework.lang.NonNullApi;
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(@Nonnull HttpServletRequest request,@Nonnull  HttpServletResponse response,@Nonnull  Object handler)
            throws Exception {
        System.out.println("LoginInterceptor");
        return true;
    }
}

下面这个注解,用来控制什么时候调用拦截器

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");
    }
}
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值