package com.rubin.rpan.services.modules.file.service.impl;
import com.google.common.collect.Lists;
import com.rubin.rpan.services.common.constant.CommonConstant;
import com.rubin.rpan.services.common.exception.RPanException;
import com.rubin.rpan.services.common.response.ResponseCode;
import com.rubin.rpan.services.modules.file.bo.FilePositionBO;
import com.rubin.rpan.services.modules.file.constant.FileConstant;
import com.rubin.rpan.services.modules.file.dao.RPanUserFileMapper;
import com.rubin.rpan.services.modules.file.entity.RPanFile;
import com.rubin.rpan.services.modules.file.entity.RPanUserFile;
import com.rubin.rpan.services.modules.file.service.IFileService;
import com.rubin.rpan.services.modules.file.service.IUserFileService;
import com.rubin.rpan.services.modules.file.vo.*;
import com.rubin.rpan.services.modules.share.service.IShareService;
import com.rubin.rpan.services.modules.user.service.IUserSearchHistoryService;
import com.rubin.rpan.storage.StorageManager;
import com.rubin.rpan.util.FileUtil;
import com.rubin.rpan.util.HttpUtil;
import com.rubin.rpan.util.IdGenerator;
import com.rubin.rpan.util.StringListUtil;
import com.rubin.rpan.util.file.type.context.FileTypeContext;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;
/**
* 用户文件业务处理实现
* Created by RubinChu on 2021/1/22 下午 4:11
*/
@Service(value = "userFileService")
@Transactional(rollbackFor = Exception.class, propagation= Propagation.SUPPORTS)
public class UserFileServiceImpl implements IUserFileService {
private static final Logger log = LoggerFactory.getLogger(UserFileServiceImpl.class);
@Autowired
@Qualifier(value = "rPanUserFileMapper")
private RPanUserFileMapper rPanUserFileMapper;
@Autowired
@Qualifier(value = "fileService")
private IFileService iFileService;
@Autowired
@Qualifier(value = "userSearchHistoryService")
private IUserSearchHistoryService iUserSearchHistoryService;
@Autowired
@Qualifier(value = "shareService")
private IShareService iShareService;
@Autowired
@Qualifier(value = "storageManager")
private StorageManager storageManager;
/**
* 获取文件列表
*
* @param parentId
* @param fileTypes
* @param userId
* @return
*/
@Override
public List<RPanUserFileVO> list(Long parentId, String fileTypes, Long userId) {
return list(parentId, fileTypes, userId, FileConstant.DelFlagEnum.NO.getCode());
}
/**
* 获取文件列表
*
* @param parentId
* @param fileTypes
* @param userId
* @param delFlag
* @return
*/
@Override
public List<RPanUserFileVO> list(Long parentId, String fileTypes, Long userId, Integer delFlag) {
List<Integer> fileTypeArray = null;
if (Objects.equals(CommonConstant.ZERO_LONG, parentId)) {
return Lists.newArrayList();
}
if (!Objects.equals(fileTypes, FileConstant.ALL_FILE_TYPE)) {
fileTypeArray = StringListUtil.string2IntegerList(fileTypes);
}
return rPanUserFileMapper.selectRPanUserFileVOListByUserIdAndFileTypeAndParentIdAndDelFlag(userId, fileTypeArray, parentId, delFlag);
}
/**
* 获取文件列表
*
* @param fileIds
* @return
*/
@Override
public List<RPanUserFileVO> list(String fileIds) {
return rPanUserFileMapper.selectRPanUserFileVOListByFileIdList(StringListUtil.string2LongList(fileIds));
}
/**
* 创建文件夹
*
* @param parentId
* @param folderName
* @param userId
*/
@Override
public void createFolder(Long parentId, String folderName, Long userId) {
saveUserFile(parentId, folderName, FileConstant.FolderFlagEnum.YES, null, null, userId, null);
}
/**
* 文件重命名
*
* @param fileId
* @param newFilename
* @param userId
*/
@Override
public void updateFilename(Long fileId, String newFilename, Long userId) {
RPanUserFile originalUserFileInfo = getRPanUserFileByFileIdAndUserId(fileId, userId);
if (Objects.equals(originalUserFileInfo.getFilename(), newFilename)) {
throw new RPanException("请使用一个新名称");
}
if (rPanUserFileMapper.selectCountByUserIdAndFilenameAndParentId(userId, newFilename, originalUserFileInfo.getParentId()) > CommonConstant.ZERO_INT) {
throw new RPanException("名称已被占用");
}
originalUserFileInfo.setFilename(newFilename);
originalUserFileInfo.setUpdateUser(userId);
originalUserFileInfo.setUpdateTime(new Date());
if (rPanUserFileMapper.updateByPrimaryKeySelective(originalUserFileInfo) != CommonConstant.ONE_INT) {
throw new RPanException("文件重命名失败");
}
}
/**
* 删除文件(批量)
*
* @param fileIds
* @param userId
*/
@Override
public void delete(String fileIds, Long userId) {
List<Long> idList = StringListUtil.string2LongList(fileIds);
if (rPanUserFileMapper.deleteBatch(idList, userId) != idList.size()) {
throw new RPanException("删除失败");
}
iShareService.refreshShareStatus(getAllAvailableFileIdByFileIds(fileIds));
}
/**
* 文件上传
*
* @param file
* @param parentId
* @param identifier
* @param totalSize
*/
@Override
public void upload(MultipartFile file, Long parentId, Long userId, String identifier, Long totalSize, String filename) {
RPanFile rPanFile = uploadRealFile(file, userId, identifier, totalSize, FileUtil.getFileSuffix(filename));
saveUserFile(parentId, filename, FileConstant.FolderFlagEnum.NO, FileTypeContext.getFileTypeCode(filename), rPanFile.getFileId(), userId, rPanFile.getFileSizeDesc());
}
/**
* 文件分片上传
*
* @param file
* @param userId
* @param identifier
* @param totalChunks
* @param chunkNumber
* @param totalSize
* @param filename
* @return
*/
@Override
public FileChunkUploadVO uploadWithChunk(MultipartFile file, Long userId, String identifier, Integer totalChunks, Integer chunkNumber, Long totalSize, String filename) {
FileChunkUploadVO fileChunkUploadVO = new FileChunkUploadVO();
fileChunkUploadVO.setMergeFlag(FileConstant.MergeFlag.NOT_READY.getCode());
if (iFileService.saveWithChunk(file, userId, identifier, totalChunks, chunkNumber, totalSize, filename)) {
fileChunkUploadVO.setMergeFlag(FileConstant.MergeFlag.READY.getCode());
}
return fileChunkUploadVO;
}
/**
* 文件下载
*
* @param fileId
* @param response
* @param userId
*/
@Override
public void download(Long fileId, HttpServletResponse response, Long userId) {
try {
getRPanUserFileByFileIdAndUserId(fileId, userId);
} catch (RPanException e) {
throw new RPanException("您没有下载权限");
}
download(fileId, response);
}
/**
* 文件下载
*
* @param fileId
* @param response
*/
@Override
public void download(Long fileId, HttpServletResponse response) {
if (checkIsFolder(fileId)) {
throw new RPanException("不能选择�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
R-Pan文件管理系统:基于Java开发,包含385个文件,包括165个Java类文件、75个GIF图像文件、44个JavaScript文件、38个Vue组件文件、26个XML配置文件、8个PNG图像文件、5个CSS样式文件、3个BAT批处理文件、3个Shell脚本文件和2个Markdown文档。该项目是一个简单的文件管理系统,实现了文件的上传、下载、移动等功能,并支持大部分类型文件的预览,包括视频浏览和音乐播放等功能。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的R-Pan文件管理系统设计源码 (384个子文件)
start.bat 162B
stop.bat 112B
restart.bat 28B
layui.css 73KB
layer.css 14KB
layui.mobile.css 10KB
laydate.css 7KB
code.css 1KB
iconfont.eot 46KB
59.gif 10KB
22.gif 10KB
24.gif 8KB
13.gif 7KB
16.gif 7KB
39.gif 6KB
64.gif 6KB
63.gif 6KB
50.gif 6KB
loading-0.gif 6KB
4.gif 6KB
1.gif 5KB
42.gif 5KB
71.gif 5KB
21.gif 5KB
20.gif 5KB
29.gif 5KB
70.gif 4KB
5.gif 4KB
17.gif 4KB
27.gif 4KB
9.gif 4KB
44.gif 4KB
11.gif 4KB
8.gif 4KB
3.gif 4KB
23.gif 4KB
34.gif 4KB
41.gif 4KB
38.gif 4KB
65.gif 3KB
32.gif 3KB
45.gif 3KB
7.gif 3KB
12.gif 3KB
26.gif 3KB
60.gif 3KB
2.gif 3KB
40.gif 3KB
25.gif 3KB
19.gif 3KB
66.gif 3KB
18.gif 3KB
46.gif 3KB
10.gif 3KB
28.gif 3KB
51.gif 3KB
57.gif 3KB
67.gif 3KB
0.gif 3KB
48.gif 3KB
43.gif 3KB
30.gif 2KB
61.gif 2KB
33.gif 2KB
69.gif 2KB
14.gif 2KB
47.gif 2KB
36.gif 2KB
49.gif 2KB
58.gif 2KB
6.gif 2KB
54.gif 2KB
53.gif 2KB
56.gif 2KB
62.gif 2KB
31.gif 2KB
55.gif 2KB
35.gif 2KB
15.gif 2KB
loading-2.gif 2KB
37.gif 1KB
68.gif 1KB
52.gif 777B
loading-1.gif 701B
.gitignore 316B
index.html 762B
favicon.ico 17KB
UserFileServiceImpl.java 39KB
UserFileServiceTest.java 25KB
ShareServiceTest.java 14KB
ShareServiceImpl.java 14KB
FileUtil.java 13KB
FileController.java 13KB
FileServiceImpl.java 12KB
UserServiceImpl.java 12KB
OssStorageProcessor.java 11KB
UserServiceTest.java 8KB
ShareFileServiceTest.java 7KB
RecycleBinServiceTest.java 7KB
ShareController.java 7KB
共 384 条
- 1
- 2
- 3
- 4
资源评论
沐知全栈开发
- 粉丝: 4742
- 资源: 3374
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功