前期准备
1.准备一个springboot项目
2.核心代码参考博文https://blog.csdn.net/qq_38762237/article/details/81282444
配置
1.创建MyWebMvcConfigurer,这里是配置资源映射路径,通俗来讲,就是你存放图片的绝对路径和给别人看的虚拟路径。
package com.hospital.total_managed.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 资源映射路径
*/
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//addResourceHandler:指的是对外暴露的访问路径
//addResourceLocations:指的是内部文件放置的目录
//通过设置spring.resources.static-locations自定义Spring boot加载前端静态资源路径
// 如果指定了拦截器,该属性有可能失效
// 需要在拦截器ResourceHandlerRegistry中通过addLocations()指定对应路径
registry.addResourceHandler("/hospital_img/**")
.addResourceLocations("file:D://deepen//workspace//java_projects//hospital_workspace//total_managed//src//main//resources//static//hospital_img//");
}
}
2.创建一个CommonResult类,接受返回结果集,当然,可不写,把下面控制层的返回类型改成String,return返回的内容直接改成自己想要的字符串即可。
package com.hospital.total_managed.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 返回结果集
* @param <T>
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {
private Integer code;
private String massage;
private T data;
public CommonResult(Integer code,String massage){
this(code,massage,null);
}
}
3.创建一个上传文件的FileController。
package com.hospital.total_managed.controller;
import com.hospital.total_managed.entity.CommonResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.UUID;
/**
* 文件上传
*/
/**
* @RestController @Controller+@ResponseBody, 就不能返回jsp,html页面
* @RequestMapping value-->将HTTP请求映射给controller,即请求路径,produces-->解决中文乱码
*/
@RestController
@RequestMapping(value = "/api/mainadmin" ,produces = "application/json;charset=UTF-8")
public class FileController {
@GetMapping(value = "/file")
public String file() {
return "file";
}
@PostMapping(value = "/fileUpload")
public CommonResult fileUpload(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
return new CommonResult(300,"空文件");
}else {
String fileName = file.getOriginalFilename(); // 文件名
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 后缀名
String filePath = "D://deepen//workspace//java_projects//hospital_workspace//total_managed//src//main//resources//static//hospital_img//"; // 上传后的路径
fileName = UUID.randomUUID().toString().replace("-", "") + suffixName; // 新文件名
File dest = new File(filePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
}
String filename = "/hospital_img/" + fileName;
System.out.println(filename);
return new CommonResult(200,"上传成功",filename);
}
}
}
4.使用Postman测试工具
复制返回的data里的路径,在前面加上运行该项目的主机IP和端口,即可访问图片。
例如:http://127.0.0.1:8080//hospital_img/12f70a34755e4a87af4cc356670960b7.jpg