基于javaweb+mysql的springboot线上网络文件管理系统(java+springboot+html+ssm+maven+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot线上网络文件管理系统(java+springboot+html+ssm+maven+mysql)
项目介绍
本项目分为前后台,有管理员与用户两种角色;
管理员角色包含以下功能:
管理员登录,管理员主页,权限管理,分类管理,用户管理,文档管理,下载记录,上传记录等功能。 用户角色包含以下功能:
注册账号,登录,系统首页,我的资源查看,编辑资源,我的资料修改,文件上传,密码重置,邮箱信息,密码重置成功等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 8.0/5.7版本;
技术栈
HTML+CSS+JavaScript+mysql+Spring+SpringMVC+mybatis+Spring boot
使用说明
运行项目,输入http://localhost:8091 登录
this.jsonObject = jsonObject;
}
@ApiOperation(value = "获取我的下载记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "/user/downloaded", method = RequestMethod.GET)
public String getUserDownloaded(int offset, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return Formatter.listToJson(fileService.listUserDownloaded(user.getId(), offset, search));
}
@ApiOperation(value = "获取我的上传记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "/user/uploaded", method = RequestMethod.GET)
public String getUserUploaded(int offset, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return Formatter.listToJson(fileService.listUserUploaded(user.getId(), offset, search));
}
@ApiOperation(value = "文件上传")
@ApiImplicitParams({@ApiImplicitParam(name = "categoryId", value = "分类ID", required = true), @ApiImplicitParam
(name = "tag", value = "文件标签"), @ApiImplicitParam(name = "description", value = "文件描述"),
@ApiImplicitParam(name = "prefix", value = "文件前缀(仅适用于管理员上传文件,普通用户无效)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "", method = RequestMethod.POST)
public String upload(int categoryId, String tag, String description, String prefix, @RequestParam("file")
MultipartFile multipartFile) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return ControllerUtils.getResponse(fileService.upload(categoryId, tag, description, prefix, multipartFile,
user));
}
@ApiOperation(value = "获取文件记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"categoryId", value = "分类ID", required = true), @ApiImplicitParam(name = "orderBy", value = "排序方式",
required = true, example = "id desc"), @ApiImplicitParam(name = "search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/all", method = RequestMethod.GET)
public String getAll(int offset, int categoryId, String orderBy, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
boolean canGet = StartApplication.settings.getBooleanUseEval(ConfigConsts.ANONYMOUS_VISIBLE_OF_SETTING) ||
(Checker.isNotNull(user) && user.getIsVisible() == 1);
if (canGet) {
int userId = Checker.isNull(user) ? 0 : user.getId();
return Formatter.listToJson(fileService.listAll(userId, offset, categoryId, orderBy, search));
} else {
jsonObject.put("error", "权限被限制,无法获取资源,请联系管理员");
return jsonObject.toString();
}
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject remove(JSONObject object);
/**
* 复制文件
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject copy(JSONObject object);
/**
* 移动文件
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject move(JSONObject object);
/**
* 重命名
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject rename(JSONObject object);
/**
* 列出文件
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONArray list(JSONObject object);
}
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(String destination, MultipartHttpServletRequest request) {
Map<String, MultipartFile> fileMap = request.getFileMap();
MultipartFile[] files = ArrayUtils.mapToArray(fileMap, MultipartFile.class);
jsonObject.put("result", fileManagerService.upload(destination, files));
return jsonObject.toJSONString();
}
@AuthInterceptor(InterceptorLevel.SYSTEM)
@RequestMapping(value = "/extract", method = RequestMethod.POST)
public String extract(@RequestBody JSONObject json) {
jsonObject.put("result", fileManagerService.extract(json));
return jsonObject.toJSONString();
}
@AuthInterceptor(InterceptorLevel.SYSTEM)
@RequestMapping(value = "/compress", method = RequestMethod.POST)
public String compress(@RequestBody JSONObject json) {
jsonObject.put("result", fileManagerService.compress(json));
return jsonObject.toJSONString();
}
@AuthInterceptor(InterceptorLevel.SYSTEM)
@RequestMapping(value = "/permission", method = RequestMethod.POST)
public String setPermission(@RequestBody JSONObject json) {
jsonObject.put("result", fileManagerService.setPermission(json));
return jsonObject.toJSONString();
}
@AuthInterceptor(InterceptorLevel.SYSTEM)
@RequestMapping(value = "/folder", method = RequestMethod.POST)
public String createFolder(@RequestBody JSONObject json) {
jsonObject.put("result", fileManagerService.createFolder(json));
return jsonObject.toJSONString();
}
@AuthInterceptor(InterceptorLevel.SYSTEM)
@RequestMapping(value = "/content", method = RequestMethod.POST)
public String getContent(@RequestBody JSONObject json) {
jsonObject.put("result", fileManagerService.getContent(json));
return jsonObject.toJSONString();
}
@AuthInterceptor(InterceptorLevel.SYSTEM)
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String edit(@RequestBody JSONObject json) {
jsonObject.put("result", fileManagerService.edit(json));
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return Formatter.listToJson(fileService.listUserDownloaded(user.getId(), offset, search));
}
@ApiOperation(value = "获取我的上传记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "/user/uploaded", method = RequestMethod.GET)
public String getUserUploaded(int offset, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return Formatter.listToJson(fileService.listUserUploaded(user.getId(), offset, search));
}
@ApiOperation(value = "文件上传")
@ApiImplicitParams({@ApiImplicitParam(name = "categoryId", value = "分类ID", required = true), @ApiImplicitParam
(name = "tag", value = "文件标签"), @ApiImplicitParam(name = "description", value = "文件描述"),
@ApiImplicitParam(name = "prefix", value = "文件前缀(仅适用于管理员上传文件,普通用户无效)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "", method = RequestMethod.POST)
public String upload(int categoryId, String tag, String description, String prefix, @RequestParam("file")
MultipartFile multipartFile) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return ControllerUtils.getResponse(fileService.upload(categoryId, tag, description, prefix, multipartFile,
user));
}
@ApiOperation(value = "获取文件记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"categoryId", value = "分类ID", required = true), @ApiImplicitParam(name = "orderBy", value = "排序方式",
required = true, example = "id desc"), @ApiImplicitParam(name = "search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/all", method = RequestMethod.GET)
public String getAll(int offset, int categoryId, String orderBy, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
boolean canGet = StartApplication.settings.getBooleanUseEval(ConfigConsts.ANONYMOUS_VISIBLE_OF_SETTING) ||
(Checker.isNotNull(user) && user.getIsVisible() == 1);
if (canGet) {
int userId = Checker.isNull(user) ? 0 : user.getId();
return Formatter.listToJson(fileService.listAll(userId, offset, categoryId, orderBy, search));
} else {
jsonObject.put("error", "权限被限制,无法获取资源,请联系管理员");
return jsonObject.toString();
}
}
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/{email}/code", method = RequestMethod.POST)
public String sendVerifyCode(@PathVariable("email") String email) {
int code = commonService.sendVerifyCode(email);
if (code > 0) {
request.getSession().setAttribute(DefaultValues.CODE_STRING, code);
logger.info("verify code: " + code);
jsonObject.put("status", "success");
} else {
jsonObject.put("status", "error");
}
return jsonObject.toString();
}
@ApiOperation(value = "验证验证码是否正确")
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/{code}/verification", method = RequestMethod.PUT)
public String verifyCode(@PathVariable("code") String code) {
boolean isSuccess = Checker.checkNull(code).equals(String.valueOf(request.getSession().getAttribute
(DefaultValues.CODE_STRING)));
return ControllerUtils.getResponse(isSuccess);
}
}
}
@ApiOperation(value = "通过文件路径获取服务器端的文件")
@ApiImplicitParam(name = "path", value = "文件路径(默认根目录)")
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/server", method = RequestMethod.GET)
public String getServerFilesByPath(String path) {
File[] files = FileExecutor.listFile(Checker.isEmpty(path) ? (Checker.isWindows() ? "C:\\" : "/") : path);
JSONArray array = new JSONArray();
if (Checker.isNotNull(files)) {
for (File file : files) {
array.add(BeanUtils.beanToJson(file));
}
}
return array.toJSONString();
}
@ApiOperation("分享服务器端文件")
@ApiImplicitParams({@ApiImplicitParam(name = "prefix", value = "自定义前缀(可空)"), @ApiImplicitParam(name = "files",
value = "文件", required = true, example = "file1,file2,file3")})
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/server/share", method = RequestMethod.POST)
public String shareFile(String prefix, String files) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return ControllerUtils.getResponse(fileService.shareFiles(Checker.checkNull(prefix), files, user));
}
@ApiOperation(value = "更新文件路径(包括本地路径,访问路径,如果新的本地路径和访问路径均为空,这什么也不会做)")
@ApiImplicitParams({@ApiImplicitParam(name = "oldLocalUrl", value = "文件本地路径", required = true), @ApiImplicitParam
(name = "localUrl", value = "新的本地路径(可空)"), @ApiImplicitParam(name = "visitUrl", value = "新的访问路径(可空)")})
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/{id}/url", method = RequestMethod.PUT)
public String uploadFileUrl(@PathVariable("id") int id, String oldLocalUrl, String localUrl, String visitUrl) {
boolean[] b = fileService.updateUrl(id, oldLocalUrl, localUrl, visitUrl);
String responseJson = "{status:{localUrl:" + b[0] + ",visitUrl:" + b[1] + "}}";
return Formatter.formatJson(responseJson);
}
@ApiOperation(value = "批量删除文件")
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/batch/{ids}", method = RequestMethod.DELETE)
public String deleteFiles(@PathVariable("ids") String ids) {
return ControllerUtils.getResponse(fileService.deleteFiles(ids));
}
/**
*/
public interface IFileService {
/**
* 更新文件权限
*
* @param id 文件编号
* @param auth 权限集
*
* @return 是否更新成功
*/
boolean updateAuth(long id, String auth);
/**
* 获取文件权限
*
* @param id 文件编号
*
* @return {@link BaseAuthRecord}
*/
BaseAuthRecord getAuth(long id);
/**
* 批量删除文件
*
* @param ids 所有文件编号
*
* @return 是否删除成功
*/
boolean deleteFiles(String ids);
/**
* 更新文件路径
*
* @param id 文件编号
* @param oldLocalUrl 原本地路径
* @param localUrl 本地路径
* @param visitUrl 访问路径
*
* @return 是否更新成功
*/
boolean[] updateUrl(int id, String oldLocalUrl, String localUrl, String visitUrl);
/**
* 更新文件信息
BaseAuthRecord getAuth(long id);
/**
* 批量删除文件
*
* @param ids 所有文件编号
*
* @return 是否删除成功
*/
boolean deleteFiles(String ids);
/**
* 更新文件路径
*
* @param id 文件编号
* @param oldLocalUrl 原本地路径
* @param localUrl 本地路径
* @param visitUrl 访问路径
*
* @return 是否更新成功
*/
boolean[] updateUrl(int id, String oldLocalUrl, String localUrl, String visitUrl);
/**
* 更新文件信息
*
* @param id 文件编号
* @param user 用户对象
* @param name 文件名
* @param category 文件分类
* @param tag 标签
* @param description 文件描述
*
* @return 是否更新成功
*/
boolean updateFileInfo(long id, User user, String name, String category, String tag, String description);
/**
* 删除文件,验证权限
*
* @param user 用户对象
* @param fileId 文件编号
*
public String avatarUpload(@RequestParam("file") MultipartFile multipartFile) {
String name = commonService.uploadAvatar(multipartFile);
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
user.setAvatar("/common/avatar/" + name);
userService.updateBasicInfoById(user.getId(), user.getAvatar(), user.getRealName(), user.getEmail());
if (Checker.isEmpty(name)) {
jsonObject.put("error", "文件格式不合法");
} else {
jsonObject.put("success", "/common/avatar/" + name);
}
return jsonObject.toString();
}
@ApiOperation(value = "发送验证码")
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/{email}/code", method = RequestMethod.POST)
public String sendVerifyCode(@PathVariable("email") String email) {
int code = commonService.sendVerifyCode(email);
if (code > 0) {
request.getSession().setAttribute(DefaultValues.CODE_STRING, code);
logger.info("verify code: " + code);
jsonObject.put("status", "success");
} else {
jsonObject.put("status", "error");
}
return jsonObject.toString();
}
@ApiOperation(value = "验证验证码是否正确")
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/{code}/verification", method = RequestMethod.PUT)
public String verifyCode(@PathVariable("code") String code) {
boolean isSuccess = Checker.checkNull(code).equals(String.valueOf(request.getSession().getAttribute
(DefaultValues.CODE_STRING)));
return ControllerUtils.getResponse(isSuccess);
}
}
*
* @param response {@link HttpServletResponse}
* @param items 文件集
* @param destFile 目标文件名
*
* @throws IOException 异常
*/
void multiDownload(HttpServletResponse response, String[] items, String destFile) throws IOException;
/**
* 上传文件(暂时还没有实现)
*
* @param destination 目标文件
* @param files {@link MultipartFile}
*
* @return {@link JSONObject}
*/
JSONObject upload(String destination, MultipartFile... files);
/**
* 解压文件
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject extract(JSONObject object);
/**
* 压缩文件
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject compress(JSONObject object);
/**
* 设置文件权限
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
*/
JSONObject setPermission(JSONObject object);
/**
* 创建文件夹
*
* @param object {@link JSONObject}
*
* @return {@link JSONObject}
/**
* 获取资源
*
* @param visitUrl 访问路径
* @param request {@link HttpServletRequest}
*
* @return {@link File}
*/
String getResource(String visitUrl, HttpServletRequest request);
/**
* 通过访问路径获取本地文件路径
*
* @param visitUrl 访问路径
*
* @return {@link String}
*/
String getLocalUrlByVisitUrl(String visitUrl);
/**
* 获取所有文件
*
* @param userId 用户编号
* @param offset 偏移
* @param categoryId 分类编号
* @param orderBy 排序方式
* @param search 搜索
*
* @return {@link List}
*/
List<FileRecord> listAll(int userId, int offset, int categoryId, String orderBy, String search);
/**
* 上传文件
*
* @param categoryId 分类ID
* @param tag 标签
* @param description 描述
* @param prefix 自定义前缀
* @param multipartFile 文件
* @param user {@link User}
*
* @return 是否上传成功
* @param offset 偏移
* @param search 搜索
*
* @return {@link List}
*/
List<FileRecord> listUserUploaded(int userId, int offset, String search);
/**
* 通过编号删除,不验证权限
*
* @param id 编号
*
* @return 是否删除成功
*/
boolean removeById(long id);
/**
* 通过访问路径删除
*
* @param visitUrl 访问路径
*
* @return 是否删除成功
*/
boolean removeByVisitUrl(String visitUrl);
/**
* 通过本地路径删除
*
* @param localUrl 访问路径
*
* @return 是否删除成功
*/
boolean removeByLocalUrl(String localUrl);
/**
* 获取资源
*
* @param visitUrl 访问路径
* @param request {@link HttpServletRequest}
*
@Override
public String getContent(JSONObject object) {
String fileName = object.getString("item");
try {
return FileExecutor.readFile(fileName);
} catch (IOException e) {
logger.error(e.getMessage());
return "";
}
}
@Override
public JSONObject edit(JSONObject object) {
String file = object.getString("item");
String content = object.getString("content");
try {
FileExecutor.saveFile(file, content);
return getBasicResponse(ValueConsts.TRUE);
} catch (IOException e) {
logger.error(e.getMessage());
return getBasicResponse(ValueConsts.FALSE);
}
}
@Override
public JSONObject remove(JSONObject object) {
JSONArray array = object.getJSONArray("items");
// array.forEach(file -> FileExecutor.deleteFile(file.toString()));
return getBasicResponse(ValueConsts.TRUE);
}
@Override
public JSONObject copy(JSONObject object) {
JSONArray array = object.getJSONArray("items");
String dest = object.getString("newPath");
File[] files = new File[array.size()];
int i = 0;
for (Object file : array) {
files[i++] = new File(file.toString());
}
try {
FileExecutor.copyFiles(files, dest);
return getBasicResponse(ValueConsts.TRUE);
} catch (IOException e) {
logger.error(e.getMessage());
return getBasicResponse(ValueConsts.FALSE);
/**
* 分享服务器本地文件
*
* @param prefix 链接前缀
* @param files 文件
* @param user 用户对象
*
* @return 是否添加成功
*/
boolean shareFiles(String prefix, String files, User user);
/**
* 本地路径是否存在
*
* @param localUrl 本地路径
*
* @return {@link Boolean}
*/
boolean localUrlExists(String localUrl);
/**
* 访问路径是否存在
*
* @param visitUrl 访问路径
*
* @return {@link Boolean}
*/
boolean visitUrlExists(String visitUrl);
/**
* 通过本地路径获取文件编号
*
* @param localUrl 本地路径
*
* @return 文件编号
*/
long getFileId(String localUrl);
/**
* 获取所有文件基本信息
*
@ApiOperation(value = "获取我的下载记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "/user/downloaded", method = RequestMethod.GET)
public String getUserDownloaded(int offset, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return Formatter.listToJson(fileService.listUserDownloaded(user.getId(), offset, search));
}
@ApiOperation(value = "获取我的上传记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "/user/uploaded", method = RequestMethod.GET)
public String getUserUploaded(int offset, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return Formatter.listToJson(fileService.listUserUploaded(user.getId(), offset, search));
}
@ApiOperation(value = "文件上传")
@ApiImplicitParams({@ApiImplicitParam(name = "categoryId", value = "分类ID", required = true), @ApiImplicitParam
(name = "tag", value = "文件标签"), @ApiImplicitParam(name = "description", value = "文件描述"),
@ApiImplicitParam(name = "prefix", value = "文件前缀(仅适用于管理员上传文件,普通用户无效)")})
@AuthInterceptor(InterceptorLevel.USER)
@RequestMapping(value = "", method = RequestMethod.POST)
public String upload(int categoryId, String tag, String description, String prefix, @RequestParam("file")
MultipartFile multipartFile) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
return ControllerUtils.getResponse(fileService.upload(categoryId, tag, description, prefix, multipartFile,
user));
}
@ApiOperation(value = "获取文件记录")
@ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
"categoryId", value = "分类ID", required = true), @ApiImplicitParam(name = "orderBy", value = "排序方式",
required = true, example = "id desc"), @ApiImplicitParam(name = "search", value = "记录匹配(允许为空)")})
@AuthInterceptor(InterceptorLevel.NONE)
@RequestMapping(value = "/all", method = RequestMethod.GET)
public String getAll(int offset, int categoryId, String orderBy, String search) {
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
boolean canGet = StartApplication.settings.getBooleanUseEval(ConfigConsts.ANONYMOUS_VISIBLE_OF_SETTING) ||
(Checker.isNotNull(user) && user.getIsVisible() == 1);
if (canGet) {
int userId = Checker.isNull(user) ? 0 : user.getId();
return Formatter.listToJson(fileService.listAll(userId, offset, categoryId, orderBy, search));
} else {
jsonObject.put("error", "权限被限制,无法获取资源,请联系管理员");
return jsonObject.toString();
}
*/
@RestController
@RequestMapping("/auth")
@Api(value = "/auth", description = "权限表相关操作")
public class AuthController {
private final IAuthService authService;
@Autowired
public AuthController(IAuthService authService) {this.authService = authService;}
@ApiOperation(value = "添加权限记录", notes = "设置指定用户对指定文件的权限")
@ApiImplicitParams({@ApiImplicitParam(name = "files", value = "文件", example = "file1,file2,file3", required = true),
@ApiImplicitParam(name = "users", value = "用户", example = "user1,user2,user3", required = true),
@ApiImplicitParam(name = "auths", value = "权限", example = "1,1,1,1", required = true)})
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "", method = RequestMethod.POST)
public String add(String files, String users, String auths) {
System.out.println("files: " + files + " users: " + users + " auths: " + auths);
return ControllerUtils.getResponse(authService.addAuth(files, users, auths));
}
@ApiOperation(value = "获取权限记录")
@ApiImplicitParams({@ApiImplicitParam(name = "user", value = "用户", required = true), @ApiImplicitParam(name =
"file", value = "文件", required = true), @ApiImplicitParam(name = "offset", value = "偏移量", required = true)})
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/all", method = RequestMethod.GET)
public String getAuth(String user, String file, int offset) {
return Formatter.listToJson(authService.listAuth(user, file, offset));
}
@ApiOperation(value = "更新权限记录")
@ApiImplicitParams({@ApiImplicitParam(name = "auth", value = "权限值", required = true)})
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String updateAuth(@PathVariable("id") long id, String auth) {
return ControllerUtils.getResponse(authService.updateAuth(id, auth));
}
@ApiOperation(value = "批量删除权限记录")
@AuthInterceptor(InterceptorLevel.ADMIN)
@RequestMapping(value = "/batch/{ids}", method = RequestMethod.DELETE)
public String batchDelete(@PathVariable("ids") String ids) {
return ControllerUtils.getResponse(authService.batchDelete(ids));
}
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
Exception.class)
public boolean updateFileInfo(long id, User user, String name, String category, String tag, String description) {
File file = fileDAO.getById(id);
if (Checker.isNotNull(file) && file.getIsUpdatable() == 1) {
AuthRecord authRecord = authService.getByFileIdAndUserId(id, user.getId());
String suffix = FileExecutor.getFileSuffix(name);
boolean canUpdate = (Checker.isNull(authRecord) ? user.getIsUpdatable() == 1 :
authRecord.getIsUpdatable() == 1) && Checker.isNotEmpty(name) && Pattern.compile(StartApplication.settings.getStringUseEval(ConfigConsts.FILE_SUFFIX_MATCH_OF_SETTING)).matcher(suffix).matches();
if (canUpdate) {
String localUrl = file.getLocalUrl();
java.io.File newFile = new java.io.File(localUrl);
String visitUrl = file.getVisitUrl();
String newLocalUrl = localUrl.substring(0, localUrl.lastIndexOf(ValueConsts.SEPARATOR) + 1) + name;
String newVisitUrl = visitUrl.substring(0, visitUrl.lastIndexOf(ValueConsts.SPLASH_STRING) + 1) + name;
file.setName(name);
file.setSuffix(suffix);
file.setLocalUrl(newLocalUrl);
file.setVisitUrl(newVisitUrl);
file.setCategoryId(categoryService.getIdByName(category));
file.setTag(tag);
file.setDescription(description);
boolean isValid = (localUrl.endsWith(ValueConsts.SEPARATOR + name) || (!Checker.isExists(newLocalUrl)
&& !localUrlExists(newLocalUrl) && !visitUrlExists(newVisitUrl)));
if (isValid && fileDAO.updateFileInfo(file)) {
return newFile.renameTo(new java.io.File(newLocalUrl));
}
}
}
return false;
}
@Override
public boolean removeFile(User user, long fileId) {
File file = fileDAO.getById(fileId);
boolean isDeleted = false;
if (Checker.isNotNull(file) && file.getIsDeletable() == 1) {
AuthRecord authRecord = authService.getByFileIdAndUserId(fileId, user.getId());
String localUrl = fileDAO.getLocalUrlById(fileId);
isDeleted = (Checker.isNull(authRecord) ? user.getIsDeletable() == 1 : authRecord.getIsDeletable() == 1)
&& removeById(fileId);
if (isDeleted) {
FileExecutor.deleteFile(localUrl);
}
}
return isDeleted;
}
/**
*/
@RestController
@RequestMapping("/common")
@Api(value = "/common", description = "公共接口")
public class CommonController {
private static Logger logger = LoggerFactory.getLogger(ConfigController.class);
private final ICommonService commonService;
private final HttpServletRequest request;
@Autowired
private IUserService userService;
private final JSONObject jsonObject;
@Autowired
public CommonController(ICommonService commonService, HttpServletRequest request, JSONObject jsonObject) {
this.commonService = commonService;
this.request = request;
this.jsonObject = jsonObject;
}