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"};@Resourceprivate 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实现图片文件上传相关推荐

  1. java的图片文件上传下载,多表新增,菜品信息分页

    上传文件:表单要求 1,enctype="multipart/form-data" 2.表单中需要有type="file"的input 3.表单的请求方式一定是 ...

  2. java里面的文件上传与下载

    java里面的文件上传与下载 文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileuplo ...

  3. java实现多文件上传至本地服务器

    转载自  java实现多文件上传至本地服务器 博主最近在做一个内网项目,内部可以访问外部数据,但是外部访问不了内部数据,这也就造成了可能文件无法上传,所以博主另辟蹊径,在本地服务器上建立一个文件夹专门 ...

  4. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  5. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller;import java.awt.image.Buffere ...

  6. android webview 多文件上传,Android网页WebView图片文件上传的问题

    Android网页WebView图片文件上传的问题 发布时间:2020-07-13 22:48:15 来源:51CTO 阅读:5922 作者:拾荒者老大 在安卓下,webview上传图片点击是没用的, ...

  7. java+ajax实现文件上传

    1 文件上传 利用Java+ajax实现文件上传,这里介绍两种提交方法,第一种是file提交,第二种是base64提交 1.1 file方式 1.1.1 FileNameUtils public cl ...

  8. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

  9. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

最新文章

  1. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
  2. 【opencv】5.cv::findContours和cv::drawContours()
  3. 二叉树剪枝_决策树,生成剪枝,CART算法
  4. stripslashes和addslashes的区别
  5. ES5(三)——数组新增函数every()、some()、map()、foreach()、filter()和reduce()汇总
  6. 荣耀鸿蒙os2.0公测版,鸿蒙OS 2.0他来了!华为HarmonyOS 2.0开发者公测版正式推送
  7. 文件读写’r'和’rb’区别
  8. C#使用struct直接转换下位机数据的示例代码
  9. ADCS relay
  10. Matlab实现Taylor展开近似计算、五角星画法
  11. outlook 签名_如何在Outlook 2013中创建新签名
  12. 信息隐藏技术综述——粗浅入门
  13. Rust 从入门到精通01-简介
  14. JS_画中画,video视频播放器
  15. 差距不止一星半点,Github星标85K的性能优化法则圣经
  16. PhotoZoom Classic 7怎么样?对电脑和系统要求高不高?
  17. “面子”真的那么重要吗?——2017过年返乡见闻与思考
  18. 重磅发布:《AI产品经理的实操手册(2023版)》
  19. 2021-09-05-数字身份与区块链
  20. 智能CAN总线隔离中继器

热门文章

  1. x265-1.8版本-common/framedata.h注释
  2. ADB系统变量的配置
  3. springboot首次整合Mongodb及可视化客户端Robo3T(附Mongodb和Robo3T安装包)
  4. k8s集群监控cadvisor+prometheus+grafana部署
  5. 用数据分析来挖掘一下大家最喜欢的抖音视频都有哪些...
  6. 远征日服·信喵之野望 按键精灵脚本4.截卡
  7. 2022年底总结(被阿里捞的第1、2、3...次)
  8. 基于FCM算法优化的图像分割研究(附源代码)
  9. RC电路的充放过程C语言实现,RC充放电电路图
  10. 2020年系统集成项目管理工程师考试目标及要求