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;

}

esult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {

return uploadImgMethod(multipartFile, request);

}

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值