SpringBoot项目的文件上传;项目路径下或工作空间外的地方
程序员文章站
2022-04-08 16:32:20
...
功能描述:
springboot项目,上传文件;
上传路径:resources文件下和项目外的地方如D盘等。
要解决的问题:
1.上传路径的设置。
2.上传到别的地方后,前端展示访问的配置。
3.上传文件,附带其他相关信息。
直接贴代码:
/**
* 上传新闻缩略图 -- 上传到本地硬盘
* @param file
* @return
*/
@CrossOrigin
@ApiOperation(httpMethod = "POST", value = "上传新闻缩略图", notes = "上传新闻缩略图", produces = "application/json;charset=UTF-8")
@ApiImplicitParam(name = "file", value = "文件名", required = true, paramType = "query")
@PostMapping("/uploadSLT")
public Object uploadSLT(HttpServletRequest request, @RequestParam("file") MultipartFile file) {
Map map = new HashMap();
if (file.isEmpty()) {
map.put("error", "上传失败,请选择文件");
}
//获取文件名
String fileName = file.getOriginalFilename();
String prefix = fileName.substring(fileName.lastIndexOf("."));//文件后缀
//新文件名
String s = IdUtil.simpleUUID();//避免重复以UUID为文件名
String filenas = s + prefix;
//定义文件存放位置;
//上传和下载的路径 linux 生产
//String filePath = "/data/file/";
String filePath = "D:/image/slt/";
File dest = new File(filePath + filenas);
try {
file.transferTo(dest);
LOGGER.info("上传成功");
//拼接地址,返回
String url = filePath + filenas;
return MapMess.success(url);
} catch (IOException e) {
LOGGER.error(e.toString(), e);
return MapMess.error(HttpRes.EXCEPTION.val(),HttpRes.EXCEPTION.msg());
}
}
上面的方法为上传到项目之外的方法;
下面为上传到项目文件夹下:
public final static String IMG_PATH_PREFIX = "static/sltimage";
public static File getImgDirFile(String imgPath){
// 构建上传文件的存放 "文件夹" 路径s
String fileDirPath = new String("src/main/resources/" + imgPath);
File fileDir = new File(fileDirPath);
if(!fileDir.exists()){
// 递归生成文件夹
fileDir.mkdirs();
}
return fileDir;
}
/**
* 上传新闻缩略图
* @param file
* @return
*/
@CrossOrigin
@ApiOperation(httpMethod = "POST", value = "上传新闻缩略图", notes = "上传新闻缩略图", produces = "application/json;charset=UTF-8")
@ApiImplicitParam(name = "file", value = "文件名", required = true, paramType = "query")
@PostMapping("/uploadSLT")
public Object uploadSLT(HttpServletRequest request, @RequestParam("file") MultipartFile file) {
Map map = new HashMap();
if (file.isEmpty()) {
map.put("error", "上传失败,请选择文件");
}
//获取文件名
String fileName = file.getOriginalFilename();
String prefix = fileName.substring(fileName.lastIndexOf("."));//文件后缀
//新文件名
String s = IdUtil.simpleUUID();//避免重复以UUID为文件名
String filenas = s + prefix;
// 存放上传图片的文件夹
File fileDir = getImgDirFile(IMG_PATH_PREFIX);
// 输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径
String absolutePath = fileDir.getAbsolutePath();
File dest = new File(absolutePath +File.separator+ filenas);
try {
file.transferTo(dest);
LOGGER.info("上传成功");
//拼接地址
String url = filePath + filenas;
return MapMess.success(url);
} catch (IOException e) {
LOGGER.error(e.toString(), e);
return MapMess.error(HttpRes.EXCEPTION.val(),HttpRes.EXCEPTION.msg());
}
}
通过项目访问存储在别的地方的图片;
@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
File fileDir = new File("classpath:src/main/resources/static/sltimage/");
//和页面有关的静态目录都放在项目的static目录下
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/META-INF/resources/static/");
//上传的图片在D盘下的image目录下,访问路径如:http://localhost:8080/image/slt/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg
//其中image/slt表示访问的前缀。"file:D:/image/slt/"是文件真实的存储路径
registry.addResourceHandler("/image/slt/**").addResourceLocations("file:D:/image/slt/");
}
}
参考资料:
https://www.jianshu.com/p/54e0ca450f88
https://blog.csdn.net/ajklaclk/article/details/80804137