package com.budbreak.pan.service.pan.impl;
import com.alibaba.fastjson.JSONObject;
import com.budbreak.pan.common.*;
import com.budbreak.pan.entity.link.Secret;
import com.budbreak.pan.model.FileMsg;
import com.budbreak.pan.service.WebUtil;
import com.budbreak.pan.service.link.SecretService;
import com.budbreak.pan.service.pan.FileService;
import com.budbreak.pan.vo.link.SecretVO;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.budbreak.pan.common.StringUtil.stringSlashToOne;
/**
* @author baoqi
* @date 2020/4/27 12:04
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class FileServiceImpl implements FileService {
@Autowired
private SecretService secretService;
@Value("${fileRootPath}")
public String fileRootPath;
@Value("${tempPath}")
public String tempPath;
@Value("${size}")
public int size;
@Value("${secretLen}")
private int secretLen;
@Value("${key}")
private String key;
@Override
public InvokeResult getSpaceSize(HttpServletRequest request) {
// 普通用户限制80G,guest用户限制40G,
String username = WebUtil.getUserNameByRequest(request);
Map<String, String> spaceMap = new HashMap<>();
spaceMap.put("totalSpace", "80");
double totalSpace = 80;
if ("guest".equals(username)) {
spaceMap.put("totalSpace", "40");
totalSpace = 40;
}
long dirlength = SystemUtil.getDirSpaceSize(fileRootPath + username);
double dirlengthDouble = dirlength / 1024.0 / 1024 / 1024;
String usedeSpace = String.format("%.2f", dirlengthDouble);
String freeSpace = String.format("%.2f", totalSpace - Double.valueOf(usedeSpace));
spaceMap.put("freeSpace", freeSpace);
return InvokeResult.success(JSONObject.toJSONString(spaceMap));
}
@Override
public List<FileMsg> fileConvert(List<FileMsg> fileMsgList) {
List<FileMsg> fileMsgLists = fileMsgList;
// 判断文件转码情况
for (FileMsg fileMsg : fileMsgLists) {
// 跳过文件夹
if (fileMsg.getSize().equals("Directory")) {
continue;
}
// 正常文件
int suffixidx = (int) StringUtil.getfilesuffix(fileMsg.getName(), true);
String suffix = fileMsg.getName().substring(suffixidx);
if (suffix.equals("mkv") || suffix.equals("rmvb") || suffix.equals("avi") || suffix.equals("wmv")
|| suffix.equals("3gp") || suffix.equals("rm")) {
// 取非文件夹的所有文件名
List<String> namelist = fileMsgList.stream()
.filter(f -> !f.getSize().equals("Directory"))
.map(FileMsg::getName)
.collect(Collectors.toList());
// 含有转码文件的情况下
if (namelist.contains(fileMsg.getName().substring(0, suffixidx) + "mp4")) {
Map<String, Object> map = FfmpegUtil.ffmpegTaskMap.get(fileMsg.getLink());
// 含有转码文件且有转码记录
if (null != map) {
String transcode = (String) map.get("flag");
fileMsg.setTranscode(transcode);
}
// 含有转码文件但没有转码记录,说明之前已完成转码
else {
fileMsg.setTranscode("complete");
}
}
// 没有转码文件说明可转码
else {
fileMsg.setTranscode("transcodable");
}
}
}
return fileMsgLists;
}
@Override
public List<FileMsg> userFileList(HttpServletRequest request, String path) {
if (path == null) {
path = "/";
}
String userName = WebUtil.getUserNameByRequest(request);
List<FileMsg> fileMsgList = new ArrayList<>();
// 拉取文件列表-本地磁盘
String webSaveFilePath = fileRootPath + userName + "/" + path;
File files = new File(webSaveFilePath);
if (!files.exists()) {
return fileMsgList;
}
File[] tempList = files.listFiles();
if (tempList == null) {
return fileMsgList;
}
for (File file : tempList) {
if (file.isFile()) {
FileMsg fileMsg = new FileMsg();
// 获取文件名和下载地址
String link = file.toString().replace("\\", "/");
String[] nameArr = link.split("/");
String name = nameArr[nameArr.length - 1];
link = link.replace(fileRootPath, "/data/");
link = link.replace("/root/pan/", "/data/");
String size = FileUtil.fileSizeToString(file.length());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String lastModTime = formatter.format(file.lastModified());
// 赋值到json
fileMsg.setName(name);
fileMsg.setLink(link);
fileMsg.setSize(size);
fileMsg.setTime(lastModTime);
if (FileUtil.isMp4(name)) {
fileMsg.setType("mp4");
} else if (FileUtil.isVideo(name)) {
fileMsg.setType("video");
} else {
fileMsg.setType("file");
}
fileMsgList.add(fileMsg);
} else {
FileMsg fileMsg = new FileMsg();
String link = file.toString().replace("\\", "/");
String[] nameArr = link.split("/");
String name = nameArr[nameArr.length - 1];
String dirPath = link.replace(fileRootPath + userName, "");
if (!name.equals("userIcon")) {
fileMsg.setName(name);
fileMsg.setSize("Directory");
fileMsg.setType("dir");
fileMsg.setLink(dirPath);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String lastModTime = formatter.format(file.lastModified());
fileMsg.setTime(lastModTime);
fileMsgList.add(fileMsg);
}
}
}
//排序
ListUtil.listSort(fileMsgList);
return fileMsgList;
}
@Override
public InvokeResult dirCreate(HttpServletRequest request, String dirName, String path) {
if (path == null) {
path = "/";
}
if (dirName.isEmpty() || path.isEmpty()) {
return InvokeResult.failure("文件夹名为空!");
}
// 获取用户名
String userName = WebUtil.getUserNameByRequest(request);
if (!SystemUtil.isWindows()) {
// path = "/pan/" + userName + path;
path = fileRootPath + userName + path;
} else {
path = fileRootPath + userName + path;
}
// 重命名文件
File file = new File(path + "/" + dirName);
if (!file.mkdir()) {
return InvokeResult.failure("文件夹名已存在,创建失败!");
}
return InvokeResult.success();
}
@Override
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot、Mybaitis-Plus、Redis、Shiro+JWT构建无状态、Hadoop的云网盘存储系统 (230个子文件)
jq22.css 296KB
umi.css 288KB
bootstrap.css 143KB
bootstrap.min.css 118KB
DPlayer.min.css 44KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
APlayer.min.css 12KB
bootstrap-table.css 7KB
webuploader.css 515B
glyphicons-halflings-regular.eot 20KB
bt.gif 818KB
loading.gif 3KB
old.html 93KB
manager.html 19KB
share.html 16KB
login.html 14KB
index.html 12KB
onlineplayer.html 7KB
test1.html 6KB
registerCode.html 5KB
shareSecret.html 3KB
errorPage.html 456B
test.html 369B
index1.html 324B
favicon.ico 9KB
FileServiceImpl.java 30KB
JedisUtils.java 18KB
UserServiceImpl.java 13KB
FileUtil.java 10KB
DateUtils.java 9KB
FileController.java 9KB
ShiroConfig.java 9KB
JwtAuthFilter.java 8KB
Constants.java 7KB
RegexUtils.java 6KB
DESUtils.java 6KB
HdfsFileServiceImpl.java 5KB
AdminController.java 5KB
Md5SaltTool.java 4KB
IndexController.java 4KB
SecretServiceImpl.java 4KB
StringUtils.java 4KB
SecretRest.java 4KB
RabbitmqConfig.java 3KB
CookieUtils.java 3KB
FileService.java 3KB
MailServiceImpl.java 3KB
StringUtil.java 3KB
UserRest.java 3KB
WebMvcConfiguration.java 3KB
EncryptUtil.java 3KB
SequenceRest.java 3KB
ResponseHeaderAdvice.java 3KB
CodeRest.java 3KB
SaveRest.java 3KB
JWTShiroRealm.java 3KB
FfmpegUtil.java 2KB
DbShiroRealm.java 2KB
InvokeResult.java 2KB
MD5.java 2KB
JwtUtils.java 2KB
FileSplit.java 2KB
PasswordHelper.java 2KB
ListUtil.java 2KB
SecretAssembler.java 2KB
UserService.java 2KB
ConvertVideo.java 2KB
AnyRolesAuthorizationFilter.java 2KB
SystemUtil.java 2KB
Secret.java 2KB
MultipartConfig.java 2KB
FileMsg.java 2KB
SecretUpdateCommand.java 2KB
SearchFileByKey.java 2KB
User.java 2KB
SecretMapper.java 2KB
JWTCredentialsMatcher.java 2KB
UserAssembler.java 2KB
SecretCreateCommand.java 2KB
Code.java 2KB
CodeAssembler.java 2KB
SwaggerConfiguration.java 2KB
MailProperties.java 2KB
Save.java 1KB
PassWordCreate.java 1KB
SecretService.java 1KB
SecretVO.java 1KB
SaveAssembler.java 1KB
HdfsFileController.java 1KB
CodeUpdateCommand.java 1KB
UserUpdateCommand.java 1KB
UserVO.java 1KB
CodeVO.java 1KB
ShareMessage.java 1KB
CodeCreateCommand.java 1KB
CodeMapper.java 1KB
UserMapper.java 1KB
UserCreateCommand.java 1KB
SaveUpdateCommand.java 1KB
共 230 条
- 1
- 2
- 3
资源评论
博士僧小星
- 粉丝: 1912
- 资源: 5876
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IEC 62443-4-1-2018
- pycharm-community-2023.3.5.exe
- IEC 62443-4-2-2019 产品安全
- Delphi教程&案例&软件项目管理案例教程(第四版)课后习题答案.pdf
- Nasa高分卫星火点监测数据接入源码
- 基于区块链的图片版权保护系统的设计与实现+详细文档+全部资料(高分毕业设计).zip
- N0100P-VB一款SOT23封装P-Channel场效应MOS管
- 数据分析2024版Tecplot360中文教程最全解析.ppt
- 基于区块链的图片版权保护系统的设计与实现+详细文档+全部资料(高分毕业设计).zip
- 上海大众帕萨特1.8GLI 2005款线路图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功