Spring Boot 将文件上传到类路径

一、配置依赖
Spring共提供两种方式进行文件上传:
第一个是Apache的CommonsMultipartFile;
第二个是StandardMultipartFile;
这两者的最大的区别在于CommonsMultipartFile不需要指定临时路径。

如果想要使用Apache的文件上传(版本号根据自己项目而定):

<dependency>
			<groupId>commons-fileuploadgroupId>
			<artifactId>commons-fileuploadartifactId>
			<version>1.4version>
dependency>

另外一种StandardMultipartFile:
在全局配置文件(application.properties)里面指定

spring.servlet.multipart.location=你要设置的临时路径

这个属性在旧版本中是

spring.http.multipart.location=你要设置的临时路径

根据需要,再将上传文件配置成静态资源,这样你上传的图片才可以通过img标签访问

spring.resources.static-locations=上传文件的路径

二、写文件
java代码如下

@PostMapping("/upload")
public String register( @RequestPart MultipartFile headImage)
    throws IllegalStateException, IOException {
    // 设置上传文件的路径,这里设置上传到类路径下
    String ap = ResourceUtils.getFile("classpath:").getAbsolutePath();
    File f = new File(ap + "/upload/");
    // 判断类路径下的路径是否存在,不存在则创建文件夹mkdis()可以创建父级文件夹
    if (!f.exists())
    	f.mkdirs();
    // 得到绝对路径
    String path = f.getAbsolutePath();
    // 将文件名重新命名(因为可能会存在相同名字的文件)
    String fileName = System.currentTimeMillis() + headImage.getOriginalFilename();
    // 将二进制文件写到服务器磁盘上
    File file = new File(path, fileName);
    headImage.transferTo(file);
    // 重定向
    return "redirect:index";
}

前端用的是form表单提交
1、要将form表单的enctype属性设置成multipart/form-data即可
2、将method设置成POST,因为GET方式只能提交很小的数据
3、设置input标签的name属性,name属性的值与@RequestPart 值一致,并且type=file

 <input id="headImageInput"  name="headImage" type="file">

你可能感兴趣的:(Spring Boot 将文件上传到类路径)