| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package cn.reghao.dfs.store.rpc;
- import cn.reghao.dfs.api.dto.*;
- import cn.reghao.dfs.api.dto.object.GenerateSignedUrl;
- import cn.reghao.dfs.api.dto.object.GenerateSignedUrlResult;
- import cn.reghao.dfs.api.iface.ObjectService;
- import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
- import cn.reghao.dfs.store.db.mapper.FileTypeMapper;
- import cn.reghao.dfs.store.model.po.FileMeta;
- import cn.reghao.jutil.jdk.converter.DateTimeConverter;
- import cn.reghao.jutil.tool.id.IdGenerator;
- import org.apache.dubbo.config.annotation.DubboService;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * @author reghao
- * @date 2023-01-09 15:35:42
- */
- @DubboService
- @Service
- public class ObjectServiceImpl implements ObjectService {
- private final FileMetaMapper fileMetaMapper;
- private final FileTypeMapper fileTypeMapper;
- private final IdGenerator objectIdGenerator;
- public ObjectServiceImpl(FileMetaMapper fileMetaMapper, FileTypeMapper fileTypeMapper) {
- this.fileMetaMapper = fileMetaMapper;
- this.fileTypeMapper = fileTypeMapper;
- this.objectIdGenerator = new IdGenerator(32, "object-id");
- }
- @Override
- public List<FileIcon> getFileIcons() {
- List<FileIcon> list = fileTypeMapper.findAll1();
- return list;
- }
- @Override
- public GetObjectsResult list(GetObjects getObjects) {
- String region = getObjects.getRegion();
- String bucket = getObjects.getBucket();
- String prefix = getObjects.getPrefix();
- String startAfter = getObjects.getMarker();
- String delimiter = getObjects.getDelimiter();
- Integer maxKeys = getObjects.getMaxKeys();
- int count = fileMetaMapper.count();
- List<FileMeta> list;
- if (startAfter.isBlank()) {
- list = fileMetaMapper.findAll1(bucket, prefix, maxKeys);
- } else {
- list = fileMetaMapper.findAll2(bucket, prefix, startAfter, maxKeys);
- }
- List<ObjectJson> list1 = list.stream().map(fileMeta -> {
- ObjectJson objectJson = new ObjectJson();
- Integer fileTypeId = fileMeta.getFileTypeId();
- objectJson.setDir(fileTypeId == 1000);
- String objectName = fileMeta.getObjectName();
- String[] names = objectName.split("/");
- String name = names[names.length-1];
- objectJson.setName(name);
- objectJson.setPath(objectName);
- long size = fileMeta.getSize();
- objectJson.setSize(size);
- objectJson.setFormattedSize(String.valueOf(size));
- objectJson.setObjectType("Normal");
- objectJson.setType(fileTypeId);
- objectJson.setStorageClass("Standard");
- objectJson.setTimeModified(DateTimeConverter.msTimestamp(fileMeta.getUpdateTime()));
- return objectJson;
- }).collect(Collectors.toList());
- GetObjectsResult getObjectsResult = new GetObjectsResult();
- getObjectsResult.setObjectList(list1);
- getObjectsResult.setBucketName(bucket);
- getObjectsResult.setDelimiter(delimiter);
- getObjectsResult.setMaxKeys(maxKeys);
- getObjectsResult.setObjectSize(0L);
- getObjectsResult.setTruncated(true);
- return getObjectsResult;
- }
- @Override
- public void createFolder(CreateFolder createFolder) {
- String objectName = createFolder.getObjectName();
- List<String> objectNames = new ArrayList<>();
- String[] names = objectName.split("/");
- for (int i = 0; i < names.length; i++) {
- if (i == 0) {
- objectNames.add(names[i] + "/");
- } else {
- String tmp = objectNames.get(i-1) + names[i] + "/";
- objectNames.add(tmp);
- }
- }
- FileMeta fileMeta;
- int i = 0;
- for (; i < objectNames.size(); i++) {
- fileMeta = fileMetaMapper.findByObjectName(objectNames.get(i));
- if (fileMeta == null) {
- break;
- }
- }
- List<FileMeta> list = new ArrayList<>();
- for (int j = i; j < objectNames.size(); j++) {
- String objectName1 = objectNames.get(j);
- String objectId = objectIdGenerator.stringId();
- String[] names1 = objectName1.split("/");
- String filename = names1[names1.length-1];
- list.add(new FileMeta(objectName1, objectId, filename, "tnb"));
- }
- if (!list.isEmpty()) {
- fileMetaMapper.saveAll(list);
- }
- }
- @Override
- public HeadObjectResult head(HeadObject headObject) {
- String objectName = headObject.getObjectName();
- HeadObjectResult headObjectResult = fileMetaMapper.findByObjectName1(objectName);
- return headObjectResult;
- }
- @Override
- public GenerateSignedUrlResult signedUrl(GenerateSignedUrl generateSignedUrl) {
- String objectName = generateSignedUrl.getObjectName();
- String url = String.format("//oss.reghao.cn/%s", objectName);
- // 5 分钟后链接失效
- long expires = System.currentTimeMillis()/1000 + 300;
- String ossAccessId = "TMP.3KeSkQJhXm4fZNupmzTEFx8HQ7QobdYnbc4A5do6zvqDnkkHdwyKj2rvJzPCfprxBSfHM6H3tqci21rCnHwWEmVje3PHaA";
- String signature = "C1NieNpY%2FrmgaHNM2PXTPU3Tshw%3D";
- String param = String.format("Expires=%s&OSSAccessId=%s&Signature=%s", expires, ossAccessId, signature);
- return new GenerateSignedUrlResult(url, param);
- }
- }
|