我是靠谱客的博主 潇洒刺猬,最近开发中收集的这篇文章主要介绍Mybatis-Plus文件上传项目场景:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目场景:

京淘项目商品文件上传


package com.jt.service;
import com.jt.vo.ImageVO;
import net.sf.jsqlparser.statement.create.table.Index;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Service
public class FileServiceImpl implements FileService {
//定义根目录 windows系统采用该目录 Linux系统需要切换目录
private String preFilePath = "D:/JT_SOFT/images";
//定义网络地址的前缀
private String preURLPath = "http://image.jt.com";
/**
* 业务思路:
*
1.校验图片的类型 jpg png jpeg gif
*
2.校验是否为恶意程序 木马.exe.jpg
*
3.将图片进行分目录存储 hash方式存储/时间格式存储
*
4.防止图片重名,使用UUID
*/
@Override
public ImageVO upload(MultipartFile file) {
/**第一步:校验图片的类型
* 1.获取文件名称
* 2.bug:文件名称大小写问题
全部转化为小写
*/
String fileName = file.getOriginalFilename().toLowerCase();
if (!fileName.matches("^.+\.(ipg|png|gif|jpeg)$")) {
//如果图片不满足条件,则程序终止
return null;
}
/** 第二步:校验是否为恶意程序
*
*/
try {
BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
int height = bufferedImage.getHeight();
int width = bufferedImage.getWidth();
if (height == 0 || width == 0){
return null;
}
//第三步:分目录进行存储,提高检索效率,按照时间将目录划分 /yyyy/MM/dd/
String datePath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
String fileDir = preFilePath + datePath;
//创建目录
File dirFile = new File(fileDir);
if (!dirFile.exists()){//目录没有的时候,应该创建
dirFile.mkdirs();
}
//第四步:防止文件重名
String uuid = UUID.randomUUID().toString().replace("-", "");
int index = fileName.lastIndexOf(".");
String fileType = fileName.substring(index);
//新文件名称
fileName = uuid + fileType;
//第五步:实现文件的上传
String filePath = fileDir + fileName;
file.transferTo(new File(filePath));
//第六步:封装ImageVO返回数据
String virtualPath = datePath + fileName; //动态变化的路径
//第七步:封装网络地址 http://image.jt.com + 虚拟地址
String urlPath = preURLPath + virtualPath;
//网络地址
System.out.println(urlPath);
return new ImageVO(virtualPath,urlPath,fileName);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}

最后

以上就是潇洒刺猬为你收集整理的Mybatis-Plus文件上传项目场景:的全部内容,希望文章能够帮你解决Mybatis-Plus文件上传项目场景:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部