话不多说,直接上代码
第一步: 先创建controller : UploadFileController
import gl.com.gugong.util.FileNameUtil;
import gl.com.gugong.util.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Arrays;
@RequestMapping("file")
@RestController
public class UploadFileController {
//文件扩展名校验
private String arrsuffix[] = {"PNG","JPG","JPEG","BMP","GIF","SVG"};
@Value("${file.path}")
private String uploadPath;
@RequestMapping(value = "/upload")
public Result upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
try {
if (file.isEmpty()) {
return Result.error("上传图片服务器内容为空");
} else {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
if (!Arrays.asList(arrsuffix).contains(suffix.toUpperCase())) {
return Result.error("请选择正确格式的文件");
}
//获取文件名称
String filenameup = file.getOriginalFilename();
//定义要上传文件 的存放路径
String localPath = uploadPath + "/";
filenameup = FileNameUtil.getFileName(filenameup);
File dest = new File(localPath,filenameup);
if (!dest.exists()) {
dest.mkdirs();
}
file.transferTo(dest);//拷贝文件到指定路径储存
return Result.success(filenameup);
}
} catch (Exception e) {
e.printStackTrace();
}
// 返回
return Result.error("未知错误导致上传失败");
}
}
第二步创建获取随机名的util :FileNameUtil
import cn.hutool.core.util.IdUtil;
public class FileNameUtil {
/**
* 获取文件后缀
* @param fileName
* @return
*/
public static String getSuffix(String fileName){
return fileName.substring(fileName.lastIndexOf("."));
}
/**
* 生成新的文件名
* @param fileOriginName 源文件名
* @return
*/
public static String getFileName(String fileOriginName){
return IdUtil.simpleUUID() + FileNameUtil.getSuffix(fileOriginName);
}
}
来看下yml配置文件:
file.path 生产环境的时候配置Linux要上传的地址即可
spring.resources.static-locations: 这是访问图片使用的,访问图片时 ip+端口+图片名称(上传时生成的随机名称)就可以访问到图片
server:
port: 8081
spring:
web:
resources:
static-locations: file:${file.path}
file:
path: D:\photo
补充: 需要添加配置
<!--静态资源访问-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>