package com.cloudroam.manager.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.cloudroam.common.LocalUser;
|
import com.cloudroam.common.enumeration.DeletedEnum;
|
import com.cloudroam.manager.SysFileManager;
|
import com.cloudroam.model.SysFileDO;
|
import com.cloudroam.model.UserDO;
|
import com.cloudroam.module.file.FileTypeEnum;
|
import com.cloudroam.module.file.FileUtil;
|
import com.cloudroam.service.SysFileService;
|
import com.cloudroam.util.DateUtils;
|
import com.cloudroam.util.MinioUtil;
|
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.InputStream;
|
import java.net.URLEncoder;
|
import java.util.Date;
|
|
@Service
|
public class SysFileManagerImpl implements SysFileManager {
|
|
@Autowired
|
private MinioUtil minioUtil;
|
|
@Autowired
|
private SysFileService sysFileService;
|
|
|
@Override
|
@Transactional
|
public SysFileDO uploadFile(MultipartFile uploadfile, String bucket, String objectName) throws Exception {
|
|
// 目录
|
String catalog=objectName;
|
String folder=objectName+DateUtils.getCurrentDateCatalog();
|
// 原来文件
|
String originalFilename=uploadfile.getOriginalFilename();
|
// 拓展名
|
String ext = FileUtil.getFileExt(originalFilename);
|
// 新文件名
|
String newFileName=FileUtil.getNewFilename(ext);
|
// 文件的MD5,如果md5一样的话,则说明是重复性文件
|
String md5=FileUtil.getFileMD5(uploadfile.getBytes());
|
|
// 不加bucket的文件路径
|
String path=folder+ newFileName;
|
|
// 文件的完整路径
|
String fullpath=bucket+"/"+folder+ newFileName;
|
|
|
String uploadObjectName=folder+ newFileName;
|
long fileSize=uploadfile.getSize();
|
|
// 不管有没有bucket都执行创建bucket命令
|
minioUtil.createBucket(bucket);
|
minioUtil.uploadFile(uploadfile.getInputStream(), bucket, path);
|
|
|
UserDO userDO= LocalUser.getLocalUser();
|
SysFileDO sysFileDO=new SysFileDO();
|
sysFileDO.setId(IdUtil.simpleUUID());
|
sysFileDO.setBucket(bucket);
|
sysFileDO.setCatalog(catalog);
|
sysFileDO.setFolder(folder);
|
sysFileDO.setPath(path);
|
sysFileDO.setFullpath(fullpath);
|
sysFileDO.setType(FileTypeEnum.REMOTE.getValue());
|
sysFileDO.setName(originalFilename);
|
sysFileDO.setExtension(ext);
|
sysFileDO.setSize(fileSize);
|
sysFileDO.setMd5(md5);
|
|
// sysFileDO.setCreateUserId(String.valueOf(userDO.getId()));
|
// sysFileDO.setCreateUserName(userDO.getNickname());
|
sysFileDO.setCreateTime(new Date());
|
|
// sysFileDO.setUpdateUserId(String.valueOf(userDO.getId()));
|
// sysFileDO.setUpdateUserName(userDO.getNickname());
|
sysFileDO.setUpdateTime(new Date());
|
|
sysFileDO.setIsDeleted(DeletedEnum.DELETED_NO.getCode());
|
|
// 信息入库
|
sysFileService.save(sysFileDO);
|
|
// 信息返回
|
|
return sysFileService.getById(sysFileDO.getId());
|
}
|
|
@Override
|
public SysFileDO getFileByFullpath(String fullpath) {
|
QueryWrapper<SysFileDO> queryWrapper=new QueryWrapper<>();
|
queryWrapper.eq("is_deleted",DeletedEnum.DELETED_NO.getCode());
|
queryWrapper.eq("fullpath",fullpath);
|
|
return sysFileService.getOne(queryWrapper);
|
}
|
|
@Override
|
public void downloadFileWithFullpath(String fullpath, HttpServletResponse response) throws Exception {
|
|
SysFileDO fileDO = getFileByFullpath(fullpath);
|
String bucket=fullpath.substring(0,fullpath.indexOf("/"));
|
String objectName=fullpath.substring(fullpath.indexOf("/"));
|
|
InputStream stream = minioUtil.download(bucket, objectName);
|
ServletOutputStream output = response.getOutputStream();
|
// response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(objectName.substring(objectName.lastIndexOf("/") + 1), "UTF-8"));
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileDO.getName(), "UTF-8"));
|
response.setContentType("application/octet-stream");
|
response.setCharacterEncoding("UTF-8");
|
IOUtils.copy(stream, output);
|
}
|
}
|