这里要先在resources/static下面创建一个包用来保存图片(这个包的名称要和下面工具类的路径名称要一样)
1,创建一个工具类LocalUploadImageUtils
package com.pla.common.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.util.UUID;
/**
* @author LiuTBaby
* blog: cnblogs.com/lbao
* @version 1.0
* @date: 2022/6/27 9:37
*/
public class LocalUploadImageUtils{
/**
* 上传图片到服务器,默认保存在image文件夹下,文件名前默认加上uuid
* @param file 上传图片
* @return 文件访问路径
*/
public static String uploadImageFile(MultipartFile file) {
String newFileName = getNewFileNameByUuid(file.getOriginalFilename());
String finalPath = ConfigFileMessageUtils.IMAGE_ALL_DIR + newFileName;
String url = "http://"
+ ConfigFileMessageUtils.LOCAL_IP+ ":"
+ ConfigFileMessageUtils.SERVER_PORT + "/"
+ ConfigFileMessageUtils.IMAGE_DIR_NAME + "/"
+ newFileName;
boolean flag = upload(file, finalPath);
if (!flag) {
throw new RuntimeException("图片上传失败");
}
return url;
}
/**
* 上传图片到本地服务器,文件名自定义
* @param file 图片文件
* @param fileName 自定义文件名
* @return 文件访问路径
*/
public static String uploadImageFile(MultipartFile file,String fileName) {
String finalPath = ConfigFileMessageUtils.IMAGE_ALL_DIR + fileName;
String url = "http://"
+ ConfigFileMessageUtils.LOCAL_IP+ ":"
+ ConfigFileMessageUtils.SERVER_PORT + "/"
+ ConfigFileMessageUtils.IMAGE_DIR_NAME + "/"
+ fileName;
boolean flag = upload(file, finalPath);
if (!flag) {
throw new RuntimeException("图片上传失败");
}
return url;
}
/**
* 为文件名添加前缀c
* @param fix 需添加的前缀
* @param fileName 文件名
* @return 新的文件名
*/
public static String addFixForFileName(String fix, String fileName) {
return fix + getFileSuffix(fileName);
}
/**
* 上传文件到服务器
* @param file 需要上传的文件
* @param finalPath 文件存放的服务器路径
* @return 上传成功返回true,失败返回false
*/
private static boolean upload(MultipartFile file, String finalPath){
File dest = new File(finalPath);
//判断文件父目录是否存在
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdir();
}
//上传文件到服务器,相当于将内存的文件输出到服务器,OutputStream,需要try....catch....
try {
//保存文件
//transferTo(dest)方法将上传文件写到服务器上指定的文件
file.transferTo(dest);
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
private static String getNewFileNameByUuid(String fileName) {
return getUUID() + getFileSuffix(fileName);
}
private static String getUUID(){
return UUID.randomUUID().toString().replace("-", "") ;
}
private static String getFileSuffix(String fileName){
return fileName.substring(fileName.lastIndexOf("."));
}
}
/**
* 读取图片所需基本信息
*/
@Component
class ConfigFileMessageUtils implements InitializingBean {
@Value("${server.port}")
private String serverPort;
/**
* 本机IP地址
*/
public static String LOCAL_IP;
/**
* 本机服务器端口号
*/
public static String SERVER_PORT;
/**
* 保存图片目录名,默认resources/static下
*/
public static String IMAGE_DIR_NAME = "img";
/**
* 图片存放的全路径名
*/
public static String IMAGE_ALL_DIR;
/**
* 该方法在服务器加载时被调用
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
SERVER_PORT = this.serverPort;
LOCAL_IP = InetAddress.getLocalHost().getHostAddress();
IMAGE_ALL_DIR = System.getProperty("user.dir") + "/src/main/resources/static/" + IMAGE_DIR_NAME + "/";
}
}
/**
* 释放static下保存文件的目录可被访问
*/
@Configuration
@EnableWebMvc
class ImageWebMvcConfigurerAdapter implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
//访问映射,请求放行处理
registry.addResourceHandler(""+ConfigFileMessageUtils.IMAGE_DIR_NAME+"//**")
.addResourceLocations("file:"+ConfigFileMessageUtils.IMAGE_ALL_DIR);
registry.addResourceHandler("/webjars/**")
.addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
}
2.Controller层
package com.pla.controller;
import com.pla.common.result.Result;
import com.pla.common.utils.LocalUploadImageUtils;
import com.pla.service.UploadPictureService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/UploadPicture")
public class UploadPictureController {
@Autowired
private UploadPictureService uploadPictureService;
@ApiOperation("图片上传")
@PostMapping("/uPicture")
public Result UploadPicture(MultipartFile file ){
String fileName = file.getOriginalFilename();
System.out.println(fileName);
//调用工具类的方法
String imageFile = LocalUploadImageUtils.uploadImageFile(file,fileName);
if (!imageFile.isEmpty()){
return Result.ok(imageFile);
}
return Result.fail();
}
}
这里图片发送成功后会返回一个URL地址,这个地址可以在浏览器上面进行访问。
可以根据自己的需求进行修改代码,谢谢大家的浏览!