package com.ruoyi.personnel.service.impl;
|
|
import cn.hutool.core.lang.UUID;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.personnel.enumeration.AttachmentType;
|
import com.ruoyi.personnel.mapper.PersonTrainingFileMapper;
|
import com.ruoyi.personnel.pojo.PersonTrainingFile;
|
import com.ruoyi.personnel.service.FileGeneralService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.time.LocalDateTime;
|
import java.util.List;
|
|
@Service
|
|
public class FileGeneralServiceImpl implements FileGeneralService {
|
|
@Autowired
|
private PersonTrainingFileMapper fileMapper;
|
|
@Value("${wordUrl}")
|
private String wordUrl;
|
|
@Value("${file.path}")
|
private String imgUrl;
|
|
@Value("${excelUrl}")
|
private String excelUrl;
|
|
@Override
|
public void fileUpload(MultipartFile file, String suffix, Integer id,Integer type) {
|
String name = file.getOriginalFilename();
|
UUID uuid = UUID.randomUUID();
|
String fileName = uuid + name;
|
String path = "";
|
// 根据后缀判断属于什么类型
|
if(suffix.toLowerCase().contains("xls")) {
|
path = excelUrl;
|
} else if (suffix.toLowerCase().contains("doc") || suffix.toLowerCase().contains("pdf")) {
|
path = wordUrl;
|
} else {
|
path = imgUrl;
|
}
|
File file1 = new File(path);
|
if(!file1.exists()) {
|
file1.mkdir();
|
}
|
try {
|
File file2 = new File(file1, fileName);
|
file.transferTo(file2);
|
// 保存数据库
|
PersonTrainingFile personTrainingFile = new PersonTrainingFile();
|
personTrainingFile.setDetailId(id);
|
personTrainingFile.setFileUrl("/" + fileName);
|
personTrainingFile.setFileName(file.getOriginalFilename());
|
personTrainingFile.setCreateUser(SecurityUtils.getUserId().intValue());
|
personTrainingFile.setCreateTime(LocalDateTime.now());
|
personTrainingFile.setEnumAttachmentType(AttachmentType.getTypeValue(type));
|
fileMapper.insert(personTrainingFile);
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
@Override
|
public List<PersonTrainingFile> selectFile(Integer id, Integer type) {
|
List<PersonTrainingFile> personTrainingFileList = fileMapper.selectList(new LambdaQueryWrapper<PersonTrainingFile>()
|
.eq(PersonTrainingFile::getDetailId, id)
|
.eq(PersonTrainingFile::getEnumAttachmentType, AttachmentType.getTypeValue(type)));
|
if(CollectionUtils.isNotEmpty(personTrainingFileList)) {
|
for(PersonTrainingFile a : personTrainingFileList) {
|
// 设置mime
|
int i = a.getFileUrl().lastIndexOf(".");
|
String contentType = getContentType(a.getFileUrl().substring(i + 1));
|
a.setMime(contentType);
|
}
|
}
|
return personTrainingFileList;
|
}
|
|
@Override
|
public void delFile(Integer id) {
|
fileMapper.deleteById(id);
|
}
|
|
@Override
|
public void fileDownLoad(Integer id, HttpServletResponse response) {
|
PersonTrainingFile personTrainingFile = fileMapper.selectById(id);
|
// 获取文件后缀
|
String suffix = personTrainingFile.getFileName().substring(personTrainingFile.getFileName().lastIndexOf(".") + 1);
|
String path = "";
|
if(suffix.toLowerCase().contains("xls")) {
|
path = excelUrl;
|
} else if (suffix.toLowerCase().contains("doc") || suffix.toLowerCase().contains("pdf")) {
|
path = wordUrl;
|
} else {
|
path = imgUrl;
|
}
|
File file = new File(path + File.separator + personTrainingFile.getFileUrl());
|
if(!file.exists()) {
|
throw new RuntimeException("文件不存在");
|
}
|
try(FileInputStream fileInputStream = new FileInputStream(file);
|
ServletOutputStream stream = response.getOutputStream()) {
|
String contentType = getContentType(suffix);
|
response.setContentType(contentType);
|
response.setHeader("Content-disposition", "attachment;filename=" + personTrainingFile.getFileName());
|
byte[] bytes = new byte[1024];
|
int i;
|
while((i = fileInputStream.read(bytes)) != -1) {
|
stream.write(bytes, 0, i);
|
stream.flush();
|
}
|
}catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
|
|
|
|
|
|
|
}
|
// 根据文件扩展名获取 MIME 类型
|
private String getContentType(String fileExtension) {
|
switch (fileExtension) {
|
case "jpg":
|
case "jpeg":
|
return "image/jpeg";
|
case "png":
|
return "image/png";
|
case "gif":
|
return "image/gif";
|
case "pdf":
|
return "application/pdf";
|
case "doc":
|
return "application/msword";
|
case "docx":
|
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
case "xls":
|
return "application/vnd.ms-excel";
|
case "xlsx":
|
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
case "ppt":
|
case "pptx":
|
return "application/vnd.ms-powerpoint";
|
default:
|
return "application/octet-stream"; // 默认二进制流
|
}
|
}
|
}
|