前端上传文件(spring-boot-route(三)实现多文件上传)

前端上传文件(spring-boot-route(三)实现多文件上传)
spring-boot-route(三)实现多文件上传

Spring Boot默认上传的单个文件大小1MB,一次上传的总文件大小为10MB。

单个文件上传使用MultipartFile参数来接收文件,多文件使用MultipartFile[]数组来接收,然后遍历它,当成单文件来处理。

问题一:如何配置上传文件大小限制?

前端上传文件(spring-boot-route(三)实现多文件上传)

@Configurationpublic class FileConfig implements WebMvcConfigurer {    @Bean    public MultipartConfigElement multipartConfigElement(){        MultipartConfigFactory factory = new MultipartConfigFactory();        // 单个文件大小        factory.setMaxFileSize(DataSize.parse("10240MB"));        // 上传的总文件大小        factory.setMaxRequestSize(DataSize.parse("20480MB"));        return factory.createMultipartConfig();    }}

思考:SpringBoot项目推荐使用jar包的方式来运行项目,而实际应用中我们也发现jar包运行项目更加方便。但是当打完jar包后,这个jar的大小就固定好了,上传的文件肯定传不到jar包里面了。SpringBoot提供了一种方式,将文件上传到服务器物理路径下,然后做个映射关系,让图片可以正常被访问,具体操作如下:

@Configurationpublic class FileConfig implements WebMvcConfigurer {    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/static/**").addResourceLocations("file:"+"D://uploadfile/");    }}

addResourceHandler("/static/**")表示访问路径为/static/文件名,addResourceLocations("file:"+"D://uploadfile/")表示文件存储的物理路径,"file:"为固定写法。

文件上传后台实现

@RestController@Slf4jpublic class FileUpload {    @PostMapping("uploadFile")    public List uploadFile(@RequestParam("files") MultipartFile[] files) {        // 存储上传成功的文件名,响应给客户端        List list = new ArrayList<>();        // 判断文件数组长度        if(files.length <= 0){            list.add("请选择文件");            return list;        }        for(MultipartFile file : files){            // 源文件名            String originalFilename = file.getOriginalFilename();            // 文件格式            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));            // 新文件名,避免文件名重复,造成文件替换问题            String fileName = UUID.randomUUID()+"."+suffix;            // 文件存储路径            String filePath = "D:/uploadFile/";            // 文件全路径            File targetFile = new File(filePath+fileName);            // 判断文件存储目录是否存在,不存在则新建目录            if(!targetFile.getParentFile().exists()){                targetFile.getParentFile().mkdir();            }            try {                // 将图片保存                file.transferTo(targetFile);                list.add(originalFilename);            } catch (IOException e) {                log.info("文件上传异常={}",e);            }        }        return list;    }}

静态资源问题

SpringBoot静态资源默认路径为:classpath:/META-INF/resources/ ,classpath:/resources/,classpath:/static/,classpath:/public/。也就是说如果想访问静态资源,则需要将静态资源 文件放在这四个路径下面。

注:classpath 指的是 SpringBoot项目resources

如果想自定义静态资源路径有两种方式,

application.yml中指定

spring:  resources:    static-locations: classpath:/templates/

代码实现WebMvcConfigurer

@Configurationpublic class FileConfig implements WebMvcConfigurer {    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/");    }

注:当配置了自定义静态资源路径后,其默认配置将失效

文件上传前端实现

在静态资源路径下,新建file.html文件,浏览器访问ip:port/file.html,进入file页面

文件:

这里需要注意的是文件上传表单的enctype为multipart/form-data

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读