summaryrefslogtreecommitdiff
path: root/src/main/java/com/mesasoft/cn/web/controller/FileController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/mesasoft/cn/web/controller/FileController.java')
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/FileController.java220
1 files changed, 220 insertions, 0 deletions
diff --git a/src/main/java/com/mesasoft/cn/web/controller/FileController.java b/src/main/java/com/mesasoft/cn/web/controller/FileController.java
new file mode 100644
index 0000000..6ae6d57
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/FileController.java
@@ -0,0 +1,220 @@
+package com.mesasoft.cn.web.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.mesasoft.cn.SketchApplication;
+import com.mesasoft.cn.modules.constant.ConfigConsts;
+import com.mesasoft.cn.util.BeanUtils;
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.entity.User;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IFileService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.Checker;
+import com.zhazhapan.util.FileExecutor;
+import com.zhazhapan.util.Formatter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author pantao
+ * @since 2018/1/29
+ */
+@RestController
+@RequestMapping("/file")
+@Api(value = "/file", description = "文件相关操作")
+public class FileController {
+
+ private final IFileService fileService;
+
+ private final HttpServletRequest request;
+
+ private final JSONObject jsonObject;
+
+ @Autowired
+ public FileController(IFileService fileService, HttpServletRequest request, JSONObject jsonObject) {
+ this.fileService = fileService;
+ this.request = request;
+ 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 = SketchApplication.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();
+ }
+ }
+
+ @ApiOperation(value = "删除指定文件")
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+ public String removeFile(@PathVariable("id") long id) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ jsonObject.put("status", "error");
+ if (Checker.isNull(user)) {
+ jsonObject.put("message", "请先登录");
+ } else if (id < 1) {
+ jsonObject.put("message", "格式不合法");
+ } else if (fileService.removeFile(user, id)) {
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "删除失败,权限不够,请联系管理员");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "更新文件属性")
+ @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "文件名", required = true), @ApiImplicitParam(name =
+ "category", value = "分类名称", required = true), @ApiImplicitParam(name = "tag", value = "文件标签", required =
+ true), @ApiImplicitParam(name = "description", value = "文件描述", required = true)})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
+ public String updateFileInfo(@PathVariable("id") long id, String name, String category, String tag, String
+ description) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ jsonObject.put("status", "error");
+ if (fileService.updateFileInfo(id, user, name, category, tag, description)) {
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "格式不正确或权限不够,更新失败,请联系管理员");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "获取所有文件的基本信息")
+ @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "指定用户(默认所有用户)"), @ApiImplicitParam(name = "file",
+ value = "指定文件(默认所有文件)"), @ApiImplicitParam(name = "category", value = "指定分类(默认所有分类)"), @ApiImplicitParam
+ (name = "offset", value = "偏移量", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/basic/all", method = RequestMethod.GET)
+ public String getBasicAll(String user, String file, String category, int offset) {
+ return Formatter.listToJson(fileService.listBasicAll(user, file, category, offset));
+ }
+
+ @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));
+ }
+
+ @ApiOperation(value = "获取指定文件的权限记录")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/auth", method = RequestMethod.GET)
+ public String getAuth(@PathVariable("id") long id) {
+ return BeanUtils.toPrettyJson(fileService.getAuth(id));
+ }
+
+ @ApiOperation(value = "更新指定文件的权限")
+ @ApiImplicitParam(name = "auth", value = "权限", required = true, example = "1,1,1,1")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/auth", method = RequestMethod.PUT)
+ public String updateAuth(@PathVariable("id") long id, String auth) {
+ return ControllerUtils.getResponse(fileService.updateAuth(id, auth));
+ }
+
+ /**
+ * 资源下载
+ *
+ * @param response {@link HttpServletResponse}
+ */
+ @ApiOperation(value = "通过访问路径获取文件资源")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/**", method = RequestMethod.GET)
+ public void getResource(HttpServletResponse response) throws IOException {
+ ControllerUtils.loadResource(response, fileService.getResource(request.getServletPath(), request),
+ ValueConsts.FALSE);
+ }
+}