Java实现图片文件上传
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实现图片文件上传相关推荐
- java的图片文件上传下载,多表新增,菜品信息分页
上传文件:表单要求 1,enctype="multipart/form-data" 2.表单中需要有type="file"的input 3.表单的请求方式一定是 ...
- java里面的文件上传与下载
java里面的文件上传与下载 文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileuplo ...
- java实现多文件上传至本地服务器
转载自 java实现多文件上传至本地服务器 博主最近在做一个内网项目,内部可以访问外部数据,但是外部访问不了内部数据,这也就造成了可能文件无法上传,所以博主另辟蹊径,在本地服务器上建立一个文件夹专门 ...
- Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档
Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller;import java.awt.image.Buffere ...
- android webview 多文件上传,Android网页WebView图片文件上传的问题
Android网页WebView图片文件上传的问题 发布时间:2020-07-13 22:48:15 来源:51CTO 阅读:5922 作者:拾荒者老大 在安卓下,webview上传图片点击是没用的, ...
- java+ajax实现文件上传
1 文件上传 利用Java+ajax实现文件上传,这里介绍两种提交方法,第一种是file提交,第二种是base64提交 1.1 file方式 1.1.1 FileNameUtils public cl ...
- java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中
java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...
- java语言 文件上传,java中实现文件上传的方法
java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...
最新文章
- BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
- 【opencv】5.cv::findContours和cv::drawContours()
- 二叉树剪枝_决策树,生成剪枝,CART算法
- stripslashes和addslashes的区别
- ES5(三)——数组新增函数every()、some()、map()、foreach()、filter()和reduce()汇总
- 荣耀鸿蒙os2.0公测版,鸿蒙OS 2.0他来了!华为HarmonyOS 2.0开发者公测版正式推送
- 文件读写’r'和’rb’区别
- C#使用struct直接转换下位机数据的示例代码
- ADCS relay
- Matlab实现Taylor展开近似计算、五角星画法
- outlook 签名_如何在Outlook 2013中创建新签名
- 信息隐藏技术综述——粗浅入门
- Rust 从入门到精通01-简介
- JS_画中画,video视频播放器
- 差距不止一星半点,Github星标85K的性能优化法则圣经
- PhotoZoom Classic 7怎么样?对电脑和系统要求高不高?
- “面子”真的那么重要吗?——2017过年返乡见闻与思考
- 重磅发布:《AI产品经理的实操手册(2023版)》
- 2021-09-05-数字身份与区块链
- 智能CAN总线隔离中继器
热门文章
- x265-1.8版本-common/framedata.h注释
- ADB系统变量的配置
- springboot首次整合Mongodb及可视化客户端Robo3T(附Mongodb和Robo3T安装包)
- k8s集群监控cadvisor+prometheus+grafana部署
- 用数据分析来挖掘一下大家最喜欢的抖音视频都有哪些...
- 远征日服·信喵之野望 按键精灵脚本4.截卡
- 2022年底总结(被阿里捞的第1、2、3...次)
- 基于FCM算法优化的图像分割研究(附源代码)
- RC电路的充放过程C语言实现,RC充放电电路图
- 2020年系统集成项目管理工程师考试目标及要求