首页 / JAVA / Java实现图片文件上传
Java实现图片文件上传
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java实现图片文件上传,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5069字,纯文字阅读大概需要8分钟。
内容图文
![Java实现图片文件上传](/upload/InfoBanner/zyjiaocheng/629/97e949fdd6d24de8b2c5ac4d398583ac.jpg)
Java实现图片文件上传
Java实现后台图片上传,将上传图片的接口进行分层,便于维护接口。
接口部分(interface)
将接口分为单图片上传以及多图片上传
public interface FileUploadService {
//单图片上传
PicUploadResult uplodadImg(MultipartFile uploadFile, HttpServletRequest request);
//多图片上传
PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request);
}
接口实现类(interface impl)
上传图片方法类(主要)
上传多个图片只是使用了数组的方式将文件存到MultipartFile里面。以防代码冗余,所以将实现方法抽出来
/**
* 上传图片方法类
* @param multipartFile
* @param request
* @return
*/
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
(仅用于个人学习编码记录,代码均参考于百度以及自己改进,如有疑问欢迎大家积极讨论)
内容总结
以上是互联网集市为您收集整理的Java实现图片文件上传全部内容,希望文章能够帮你解决Java实现图片文件上传所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。