Java实现图片文件上传

雾凇索引
• 阅读 3187

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;

}

esult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {

return uploadImgMethod(multipartFile, request);

}

多图片上传
外汇经纪商动态http://www.fx61.com/news

public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) {

List 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 imgPahts;

}

点赞
收藏
评论区
推荐文章
梦
4年前
uniapp上传图片显示进度
uniapp上传图片,官方文档写的比较清楚,此处笔记是因为客户特殊要求,上传提示进度条,查到方法特此笔记。uploadImg(){var_selfthis;uni.chooseImage({count:1,sizeType:'copressed',success:(res){console.log(r
Easter79 Easter79
3年前
springmvc 图片 压缩上传
第一步,下载相关js文件https://blogstatic.cnblogs.com/files/linxixinxiang/compression.js第二步,建立jsp页面1<%@pagelanguage"java"import"java.util."contentType"text/html;char
ThinkPHP V5.0 图片上传base64
/单图上传@returnbool|mixed|string/protectedfunctionuploadingqrcode($images'',$name'')if(empty($images))$thisresult($images,0,'图片错误');if(pregmatch('/^(data:\simag
Stella981 Stella981
3年前
FastDFS图片服务器实现图片上传
一、传统使用1.将fastdfs\_client.jar导入工程2.加载配置文件(如conf.properties),配置文件中的内容就是tracker服务的地址。配置文件内容:tracker\_server192.168.25.133:221223.把commonsio、fileupload的jar包添加到工程中4.页面代码!
Wesley13 Wesley13
3年前
PHP实现图片(文件)上传
这几天整理做过的php项目,感觉这个经常会用到,传上来共享一下咯首先,前端界面1、表单的首行需要加上enctype"multipart/formdata",需要上传的图片必须设置type"file"表示选择文件<formid"img_form"method"post"class"formhorizontal"r
Easter79 Easter79
3年前
Springboot框架实现图片上传显示并保存地址到数据库
1.在application.properties.xml中配置SpringBoot框架实现图片上传显示并保存地址到数据库springboot上传文件大小限制spring.http.multipart.maxfilesize200MBspring.http.multi
Stella981 Stella981
3年前
Fastdfs安装_nginx进行图片动态压缩
说明1.因为上传的图片较大,部分页面直接引用图片地址,则造成页面加载缓慢问题。2.考虑到服务器空间问题,我们没有进行上传缩略图。仅仅是上传了原图3.为了优化页面加载图片的时间问题,所以对图片进行动态缩放。PS:如果访问量较高,建议进行存储缩略图图片缩放采用nginx的http\_image\_filter\_module
Stella981 Stella981
3年前
HTML5 file API加canvas实现图片前端JS压缩并上传
一、图片上传前端压缩的现实意义对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验。这种体验包括两方面:1.由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险。2.最最重要的体验改进点:省略了图片的再加工成本。很多网站的图片上传功能都会对图片的大小进
Stella981 Stella981
3年前
Javascript验证上传图片大小[前台处理]
需求分析:在做上传图片的时候,如果不限制上传图片大小,后果非常的严重。那么我们怎样才可以解决一个棘手的问题呢?有两种方式:1)后台处理:也就是AJAXPOST提交到后台,把图片上传到服务器上,然后获得该图片大小做处理。2)前台处理:也就是利用Javascript获取该图片大小。显然第一种方式,很不好。因为需要把文件先上传到
Immerse Immerse
6个月前
我悟了!原来本地图片预览还能这样搞
在网页开发中,经常会遇到需要让用户上传图片并在上传前进行预览的需求。这样做的好处显而易见:用户可以立即看到自己选择的图片是否正确,避免了不必要的上传和服务器资源浪费,提升了用户体验。
星河特战队员 星河特战队员
3个月前
鸿蒙开发实现图片上传(上传用户头像)
鸿蒙开发实现图片上传(上传用户头像)