dataease-dm/backend/src/main/java/io/dataease/service/FileService.java

116 lines
4.2 KiB
Java
Raw Normal View History

2021-02-20 10:07:25 +08:00
package io.dataease.service;
import io.dataease.base.domain.*;
import io.dataease.base.mapper.FileContentMapper;
import io.dataease.base.mapper.FileMetadataMapper;
import io.dataease.commons.constants.FileType;
2021-02-22 15:30:15 +08:00
import io.dataease.commons.exception.DEException;
2021-02-20 10:07:25 +08:00
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
@Service
public class FileService {
@Resource
private FileMetadataMapper fileMetadataMapper;
@Resource
private FileContentMapper fileContentMapper;
2021-11-22 18:34:49 +08:00
2021-02-20 10:07:25 +08:00
public byte[] loadFileAsBytes(String id) {
FileContent fileContent = fileContentMapper.selectByPrimaryKey(id);
return fileContent.getFile();
}
public FileContent getFileContent(String fileId) {
return fileContentMapper.selectByPrimaryKey(fileId);
}
public void deleteFileByIds(List<String> ids) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
FileMetadataExample example = new FileMetadataExample();
example.createCriteria().andIdIn(ids);
fileMetadataMapper.deleteByExample(example);
FileContentExample example2 = new FileContentExample();
example2.createCriteria().andFileIdIn(ids);
fileContentMapper.deleteByExample(example2);
}
public FileMetadata saveFile(MultipartFile file) {
2021-11-22 18:34:49 +08:00
return saveFile(file, file.getOriginalFilename());
2021-03-01 11:37:04 +08:00
}
2021-11-22 18:34:49 +08:00
public FileMetadata saveFile(MultipartFile file, String fileName) {
2021-02-20 10:07:25 +08:00
final FileMetadata fileMetadata = new FileMetadata();
2021-11-22 18:34:49 +08:00
setFileMetadataProperties(fileMetadata, file.getSize(), fileName);
2021-02-20 10:07:25 +08:00
fileMetadataMapper.insert(fileMetadata);
FileContent fileContent = new FileContent();
fileContent.setFileId(fileMetadata.getId());
try {
fileContent.setFile(file.getBytes());
} catch (IOException e) {
2021-02-22 15:30:15 +08:00
DEException.throwException(e);
2021-02-20 10:07:25 +08:00
}
fileContentMapper.insert(fileContent);
return fileMetadata;
}
2021-11-22 18:34:49 +08:00
private void setFileMetadataProperties(FileMetadata fileMetadata, long size, String fileName){
2021-02-20 10:07:25 +08:00
fileMetadata.setId(UUID.randomUUID().toString());
fileMetadata.setName(fileName);
2021-11-22 18:34:49 +08:00
fileMetadata.setSize(size);
2021-02-20 10:07:25 +08:00
fileMetadata.setCreateTime(System.currentTimeMillis());
fileMetadata.setUpdateTime(System.currentTimeMillis());
FileType fileType = getFileType(fileMetadata.getName());
fileMetadata.setType(fileType.name());
2021-11-22 18:34:49 +08:00
}
2021-02-20 10:07:25 +08:00
2021-11-22 18:34:49 +08:00
public FileMetadata saveFile(byte[] fileByte, String fileName, Long fileSize) {
final FileMetadata fileMetadata = new FileMetadata();
setFileMetadataProperties(fileMetadata, fileSize, fileName);
fileMetadataMapper.insert(fileMetadata);
2021-02-20 10:07:25 +08:00
FileContent fileContent = new FileContent();
fileContent.setFileId(fileMetadata.getId());
fileContent.setFile(fileByte);
fileContentMapper.insert(fileContent);
return fileMetadata;
}
public FileMetadata copyFile(String fileId) {
FileMetadata fileMetadata = fileMetadataMapper.selectByPrimaryKey(fileId);
FileContent fileContent = getFileContent(fileId);
if (fileMetadata != null && fileContent != null) {
fileMetadata.setId(UUID.randomUUID().toString());
fileMetadata.setCreateTime(System.currentTimeMillis());
fileMetadata.setUpdateTime(System.currentTimeMillis());
fileMetadataMapper.insert(fileMetadata);
fileContent.setFileId(fileMetadata.getId());
fileContentMapper.insert(fileContent);
}
return fileMetadata;
}
private FileType getFileType(String filename) {
int s = filename.lastIndexOf(".") + 1;
String type = filename.substring(s);
return FileType.valueOf(type.toUpperCase());
}
public void deleteFileById(String fileId) {
deleteFileByIds(Collections.singletonList(fileId));
}
public FileMetadata getFileMetadataById(String fileId) {
return fileMetadataMapper.selectByPrimaryKey(fileId);
}
}