关于java:springbootroute三实现多文件上传

40次阅读

共计 2890 个字符,预计需要花费 8 分钟才能阅读完成。

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

单个文件上传应用 MultipartFile 参数来接管文件,多文件应用 MultipartFile[]数组来接管,而后遍历它,当成单文件来解决。

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

@Configuration
public 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 提供了一种形式,将文件上传到服务器物理门路下,而后做个映射关系,让图片能够失常被拜访,具体操作如下:

@Configuration
public 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
@Slf4j
public class FileUpload {@PostMapping("uploadFile")
    public List uploadFile(@RequestParam("files") MultipartFile[] files) {

        // 存储上传胜利的文件名,响应给客户端
        List<String> 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

@Configuration
public class FileConfig implements WebMvcConfigurer {

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

注:当配置了自定义动态资源门路后,其默认配置将生效

文件上传前端实现

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

<form enctype="multipart/form-data" method="post" action="/uploadFile">
    文件:<input type="file" name="files"/>
    <input type="submit" value="上传"/>
</form>

这里须要留神的是文件上传表单的 enctype 为multipart/form-data

此是 spring-boot-route 系列的第三篇文章,这个系列的文章都比较简单,次要目标就是为了帮忙首次接触 Spring Boot 的同学有一个零碎的意识。本文已收录至我的 github,欢送各位小伙伴star

github:https://github.com/binzh303/s…

点关注、不迷路

如果感觉文章不错,欢送 关注 点赞 珍藏,你们的反对是我创作的能源,感激大家。

如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。

如果你还想更加深刻的理解我,能够微信搜寻「Java 旅途」进行关注。回复「1024」即可取得学习视频及精美电子书。每天 7:30 准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!

正文完
 0