Python 官方文档:入门教程 => 点击学习
Java实现后台图片上传,将上传图片的接口进行分层,便于维护接口。 接口部分(interface) 将接口分为单图片上传以及多图片上传 public interface FileUp
Java实现后台图片上传,将上传图片的接口进行分层,便于维护接口。
将接口分为单图片上传以及多图片上传
public interface FileUploadService {
//单图片上传
PicUploadResult uplodadImg(MultipartFile uploadFile, httpservletRequest request);
//多图片上传
PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request);
}
上传图片方法类(主要)
上传多个图片只是使用了数组的方式将文件存到MultipartFile里面。以防代码冗余,所以将实现方法抽出来
private PicUploadResult uploadImgMethod(MultipartFile multipartFile, HttpServletRequest request) {
PicUploadResult picUploadResult = new PicUploadResult();
if (multipartFile.isEmpty()) {
//返回选择文件提示
picUploadResult.setLegal(false);
return picUploadResult;
}
SimpleDateFORMat sdf = new SimpleDateFormat("yyyy-MM-dd/");
String format = sdf.format(new Date());
//存放上传文件的文件夹
File file = new File(baseFilePath + format);
logger.info("-----------存放上传文件的文件夹【" + file + "】-----------");
logger.info("-----------输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径【" + file.getAbsolutePath() + "】-----------");
if (!file.isDirectory()) {
//递归生成文件夹
file.mkdirs();
}
//获取原始的名字 original:最初的,起始的 方法是得到原来的文件名在客户机的文件系统名称
String oldName = multipartFile.getOriginalFilename();
logger.info("-----------文件原始的名字【" + oldName + "】-----------");
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length());
logger.info("-----------文件要保存后的新名字【" + newName + "】-----------");
try {
//构建真实的文件路径
File newFile = new File(file.getAbsolutePath() + File.separator + newName);
//转存文件到指定路径,如果文件名重复的话,将会覆盖掉之前的文件,这里是把文件上传到 “绝对路径”
multipartFile.transferTo(newFile);
String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/picbook/" + UPLOAD_PATH_PREFIX + format + newName;
logger.info("-----------【" + filePath + "】-----------");
picUploadResult.setLegal(true);
picUploadResult.setImgPath(filePath);
return picUploadResult;
} catch (Exception e) {
e.printStackTrace();
}
picUploadResult.setLegal(false);
return picUploadResult;
}
实现方法接口
单图片上传
public PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {
return uploadImgMethod(multipartFile, request);
}
多图片上传
public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) {
List<String> imgPaths = new ArrayList<>();
for (MultipartFile multipartFile : uploadFile) {
PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);
if(picUploadResult.isLegal()){
imgPaths.add(picUploadResult.getImgPath());
}else{
return picUploadResult;
}
}
PicUploadResult picUploadResult = new PicUploadResult();
picUploadResult.setLegal(true);
picUploadResult.setImgPahts(imgPaths);
return picUploadResult;
}
实现方法补充
// 项目上传至绝对路径(在yml里配置你的项目绝对路径)
@Value("${file.save-path}")
private String baseFilePath;
// 项目根路径下的目录 -- SpringBoot static 目录相当于是根路径下(springBoot 默认)
private final static String UPLOAD_PATH_PREFIX = "statics/uploadFile/";
public class FileUploadController {
// 允许上传的格式 图片形式
private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"};
@Resource
private FileUploadService fileUploadService;
@PostMapping("/uploadImg")
public R uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
boolean isFlag = false;
for (String type : IMAGE_TYPE) {
System.out.println(file.getOriginalFilename());
if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
isFlag = true;
break;
}
}
if (isFlag) {
PicUploadResult picUploadResult = fileUploadService.uplodadImg(file, request);
boolean isLegal = picUploadResult.isLegal();
if (isLegal) {
Map resMap = new HashMap<>();
resMap.put("imgPath", picUploadResult.getImgPath());
return R.ok(resMap);
} else {
return R.error("图片上传有误");
}
} else {
return R.error("上传的图片格式必须为:bmp,jpg,jpeg,png");
}
}
@PostMapping("/uploadManyImg")
public R uploadManyImg(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
boolean isFlag = false;
for (MultipartFile uploadFile : files) {
for (String type : IMAGE_TYPE) {
if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
isFlag = true;
break;
}
}
}
if (isFlag) {
PicUploadResult picUploadResult = fileUploadService.uploadManyImg(files, request);
boolean isLegal = picUploadResult.isLegal();
if (isLegal) {
Map resMap = new HashMap<>();
resMap.put("imgPaths", picUploadResult.getImgPahts());
return R.ok(resMap);
} else {
return R.error("图片上传有误");
}
} else {
return R.error("上传的图片格式必须为:bmp,jpg,jpeg,png");
}
}
}
根据实际情况添加所需的字段
public class PicUploadResult
{
private boolean isLegal;
private String imgPath;
private List<String> imgPahts;
}
Postman
(仅用于个人学习编码记录,代码均参考于百度以及自己改进,如有疑问欢迎大家积极讨论)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
--结束END--
本文标题: Java实现图片文件上传
本文链接: https://lsjlt.com/news/152387.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0