package com.kidgrow.filecenter.service.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.kidgrow.common.constant.CommonConstant;
|
import com.kidgrow.common.model.PageResult;
|
import com.kidgrow.common.utils.DateUtil;
|
import com.kidgrow.common.utils.MultipartFileUtils;
|
import com.kidgrow.common.utils.RandomValueUtils;
|
import com.kidgrow.common.utils.StringUtils;
|
import com.kidgrow.filecenter.mapper.FileMapper;
|
import com.kidgrow.filecenter.model.FileInfo;
|
import com.kidgrow.filecenter.service.IFileService;
|
import com.kidgrow.filecenter.util.FileUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import net.coobird.thumbnailator.Thumbnails;
|
import org.apache.commons.collections4.MapUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.InputStream;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
|
*
|
* @Description: <br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/18 11:24 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
@Slf4j
|
public abstract class AbstractIFileService extends ServiceImpl<FileMapper, FileInfo> implements IFileService {
|
private static final String FILE_SPLIT = ".";
|
|
@Override
|
public FileInfo upload(MultipartFile file) throws Exception {
|
FileInfo fileInfo = FileUtil.getFileInfo(file);
|
FileInfo oldFileInfo = baseMapper.selectById(fileInfo.getId());
|
if (oldFileInfo != null) {
|
return oldFileInfo;
|
}
|
if (!fileInfo.getName().contains(FILE_SPLIT)) {
|
throw new IllegalArgumentException("缺少后缀名");
|
}
|
uploadFile(file, fileInfo);
|
// 设置文件来源
|
fileInfo.setSource(fileType());
|
// 将文件信息保存到数据库
|
baseMapper.insert(fileInfo);
|
|
return fileInfo;
|
}
|
|
@Override
|
public FileInfo upload(MultipartFile file,String imgType) throws Exception {
|
FileInfo fileInfo = FileUtil.getFileInfo(file);
|
FileInfo oldFileInfo = baseMapper.selectById(fileInfo.getId());
|
if (oldFileInfo != null) {
|
return oldFileInfo;
|
}
|
if (!fileInfo.getName().contains(FILE_SPLIT)) {
|
throw new IllegalArgumentException("缺少后缀名");
|
}
|
fileInfo.setImgType(imgType); // X光片或者Logo
|
uploadFile(file, fileInfo);
|
// 设置文件来源
|
fileInfo.setSource(fileType());
|
// 将文件信息保存到数据库
|
baseMapper.insert(fileInfo);
|
|
return fileInfo;
|
}
|
|
/**
|
* 文件来源
|
*
|
* @return
|
*/
|
protected abstract String fileType();
|
|
/**
|
* 上传文件
|
*
|
* @param file
|
* @param fileInfo
|
*/
|
protected abstract void uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception;
|
protected abstract void fileUpLoadOss(FileInfo fileInfo,String newFilePath, InputStream fileStream);
|
protected abstract String FilePath(String imgType,String folderByDate);
|
|
/**
|
* 删除文件
|
* @param id 文件id
|
*/
|
@Override
|
public void delete(String id) {
|
FileInfo fileInfo = baseMapper.selectById(id);
|
if (fileInfo != null) {
|
baseMapper.deleteById(fileInfo.getId());
|
this.deleteFile(fileInfo);
|
}
|
}
|
|
/**
|
* 删除文件资源
|
*
|
* @param fileInfo
|
* @return
|
*/
|
protected abstract boolean deleteFile(FileInfo fileInfo);
|
|
@Override
|
public PageResult<FileInfo> findList(Map<String, Object> params) {
|
Page<FileInfo> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
|
List<FileInfo> list = baseMapper.findList(page, params);
|
return PageResult.<FileInfo>builder().data(list).code(0).count(page.getTotal()).build();
|
}
|
/**
|
* 上传图片-并缩略,其实是给文件服务器存储了两个文件 一个原文件 一个缩略图文件
|
* @param file form内的文件数据
|
* @param imgType 业务类型 例如logo
|
* @return 返回的实体中 path字段保存的是缩略图地址
|
* @throws Exception
|
*/
|
@Override
|
public FileInfo uploadForThumbnails(MultipartFile file, String imgType) throws Exception {
|
FileInfo fileInfo=this.upload(file,imgType);
|
if (StringUtils.isNotBlank(fileInfo.getUrl())) {
|
//生成缩略图上传
|
File nowFile= MultipartFileUtils.multipartFileToFile(file);
|
//暂存目录 发布后真实存在的磁盘目录
|
String result = CommonConstant.TEMP_IMAGE_PATH;
|
//文件扩展名
|
String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
|
String newFileName= RandomValueUtils.uuid()+suffix;
|
//生成缩略图
|
Thumbnails.of(nowFile).size(CommonConstant.TH_IMG_WIDTH, CommonConstant.TH_IMG_HEIGHT).toFile(result+newFileName);
|
File thuFile= new File(result+newFileName);
|
if (thuFile.exists()) {
|
//将生成的文件转换为流
|
InputStream inputStream=new FileInputStream(new File(result+newFileName));
|
String folderByDate = DateUtil.formatDate(new Date());
|
String filefloder=this.FilePath(imgType,folderByDate);
|
FileInfo newfileInfo=new FileInfo();
|
newfileInfo.setName(newFileName);
|
newfileInfo.setId(IdUtil.fastSimpleUUID());
|
newfileInfo.setSize(thuFile.length());
|
newfileInfo.setIsImg(true);
|
newfileInfo.setContentType(file.getContentType());
|
newfileInfo.setSource(fileInfo.getSource());
|
newfileInfo.setImgType(imgType);
|
newfileInfo.setCreateTime(new Date());
|
//文件上传到oss
|
this.fileUpLoadOss(newfileInfo,filefloder+newFileName,inputStream);
|
inputStream.close();
|
//删除暂存文件
|
MultipartFileUtils.delteTempFile(thuFile);
|
// 将文件信息保存到数据库
|
baseMapper.insert(newfileInfo);
|
fileInfo.setPath(newfileInfo.getUrl());
|
}
|
return fileInfo;
|
}
|
else
|
{
|
return fileInfo;
|
}
|
}
|
}
|