前端页面:upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/upload">
文件:<input type="file" name="head_img">
姓名:<input type="text" name="name">
<input type="submit" value="上传">
</form>
</body>
</html>
后端代码:
package net.xdclass.demo.controller;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Controller
@EnableAutoConfiguration
public class FileController {
@RequestMapping("/")
public Object index(){
return "index";
}
private static final String filePath="D:\\programme\\java\\xdclass_springboot\\src\\main\\resources\\static\\images\\";
@RequestMapping(value = "upload")
@ResponseBody
public String upload(@RequestParam("head_img") MultipartFile file, HttpServletRequest request){
//若不加MultipartFile file,文件名应与前端文件名一致
String name = request.getParameter("name");
System.out.println("用户名:"+name);
//获取文件名
String filename = file.getOriginalFilename();
System.out.println("上传的文件名为:"+filename);
//获取文件后缀名
String suffixName = filename.substring(filename.lastIndexOf("."));
System.out.println("上传的后缀为"+suffixName);
//文件上传后的路径
filename = UUID.randomUUID()+suffixName;//文件名使用UUID随机生成加后缀就是要保存的名称,这是为了防止上传文件名一样
File dest = new File(filePath+filename);
try {
file.transferTo(dest);//把文件保存到dest路径中
return filename;
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
return "上传失败!";
}
}
文件上传和访问需要指定磁盘路径
application.properties中增加下面配置
- web.images-path=/Users/jack/Desktop
- spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/test/,file:${web.images-path}
classpath 指的是编译路径 file指的是磁盘物理路径
注:${web.images-path}表示引入配置文件内容
spring.resources.static-locations(使用目录位置列表替换默认值)自定义静态资源位置 。如果执行此操作,默认的欢迎页面检测将切换到您的自定义位置。因此,如果index.html您的任何位置在启动时存在,它将成为应用程序的主页。
也就是说,他的作用就是告诉Spring Boot应该在何处查找静态资源文件,这是一个列表性的配置,查找文件时会依赖于配置的先后顺序依次进行,(四个静态资源目录)默认的官方配置如下:
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources