失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java代码实现多张图片/单张图片文件上传

java代码实现多张图片/单张图片文件上传

时间:2023-03-06 13:29:04

相关推荐

java代码实现多张图片/单张图片文件上传

在项目中有这样的需求,有多个地方需要用到上传图片的功能,可以上传一张或多张照片。这时候自然想到了封装,来达到复用的目的。前后端分离开发,可以在上传文件后返回图片路径给前端,然后在最后整个需求完成后由前端携带所有的信息(包括刚刚的图片路径)返回给后端进行保存或修改操作。高手可以忽略,不喜勿喷。

核心代码:

package com.pf.bindDate.utils;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.UUID;import org.springframework.web.multipart.MultipartFile;public class UploadFileUtil {/*** 多张/单张都可以用这个 保存图片* @paramList<MultipartFile> 要批量上传的文件* @param path 图片保存的路径* @return "wrong_file_extension"-错误的后缀, "file_empty"-空文件 或者 保存后的绝对路径*/public static List<String> uploadFiles(List<MultipartFile> files, String path) throws IOException {List<String> msgs = new ArrayList<>();if (files.size() < 1) {msgs.add("file_empty");return msgs;}for (int i = 0; i < files.size(); ++i) {MultipartFile file = files.get(i);if (!file.isEmpty()) {String filename = file.getOriginalFilename();String type = filename.indexOf(".") != -1? filename.substring(filename.lastIndexOf("."), filename.length()): null;if (type == null) {msgs.add("file_empty");return msgs;}if (!(".PNG".equals(type.toUpperCase()) || ".JPG".equals(type.toUpperCase()))) {msgs.add("wrong_file_extension");return msgs;}}}for (int i = 0; i < files.size(); ++i) {MultipartFile file = files.get(i);String filename = file.getOriginalFilename();String type = filename.indexOf(".") != -1 ? filename.substring(filename.lastIndexOf("."), filename.length()): null;String filepath = path + UUID.randomUUID() + type;File filesPath = new File(path);if (!filesPath.exists()) {filesPath.mkdir();}BufferedOutputStream out = null;type = filepath.indexOf(".") != -1 ? filepath.substring(filepath.lastIndexOf(".") + 1, filepath.length()): null;try {out = new BufferedOutputStream(new FileOutputStream(new File(filepath)));out.write(file.getBytes());msgs.add(filepath);} catch (Exception e) {// 没有上传成功e.printStackTrace();} finally {out.flush();out.close();}}return msgs;}}

封装了上传图片的工具类方便调用

controller层:

//上传图片======@Value("${file-save-path}")private String fileSavePath;@RequestMapping(value = "/uploadImages", method = RequestMethod.POST)@ApiOperation(value = "上传图片,返回图片路径给前台")@ApiImplicitParams({@ApiImplicitParam(name = "file", value = "上传图片文件,可以多个", required = true, dataType = "List<MultipartFile>"),@ApiImplicitParam(name = "uid", value = "用户id", required = true, dataType = "String"),@ApiImplicitParam(name = "code", value = "上传图片的类型(1-上传图片,2-上传动态的图片)", required = true, dataType = "String"),@ApiImplicitParam(name = "phone", value = "用户手机号", required = false, dataType = "String")})@ResponseBodypublic ResultMsg uploadImages(List<MultipartFile> file,HttpServletRequest request, Integer code,Integer uid,String phone) {String path = "";code =1;if(code == 1) {path = fileSavePath+"upload/";}if(code == 2) {path = fileSavePath+"dynamic/";}//1.后半段目录: /03/15String directory = new SimpleDateFormat("yyyy/MM/dd").format(new Date());/*** 2.文件保存目录 D:/images//03/15/* 如果目录不存在,则创建*/File dir = new File(path + directory);if (!dir.exists()) {dir.mkdirs();}String imgPath = path + directory+"/";System.out.println("图片上传,保存位置:" +imgPath );ResultMsg msg = new ResultMsg();msg.setPublicStr(phone);List<String> paths = null;try {paths = UploadFileUtil.uploadFiles(file, imgPath);} catch (IOException e) {msg.setCode(500);msg.setMsg("上传图片时IO异常!"+e);return msg;}if(paths.get(0).equals("file_empty") || paths.get(0).equals("wrong_file_extension")) {msg.setCode(403);msg.setMsg("上传图片时请求参数异常!");return msg;}msg.setCode(200);msg.setMsg("上传图片成功!");msg.setList(paths);return msg;}

ResultMsg是我封装好的像前台传送数据的工具类,如此就可以实现图片上传并把上传后的路径返回给前台。随后便可以实现对所有信息的保存或其它操作,本文重点介绍Java实现上传一张或多张图片,后面的逻辑相信难不到各位。希望对看到的小伙伴们有所帮助,不喜勿喷。同时也欢迎各位留言,不吝赐教!!!

如果觉得《java代码实现多张图片/单张图片文件上传》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。