diff --git a/.workflow/pipeline-20220517-1.yml b/.workflow/pipeline-20220517-1.yml new file mode 100644 index 0000000..cb5efae --- /dev/null +++ b/.workflow/pipeline-20220517-1.yml @@ -0,0 +1,63 @@ +version: '1.0' +name: pipeline-20220517-1 +displayName: pipeline-20220517-1 +triggers: + trigger: manual + push: + branches: + prefix: + - '' +stages: + - name: stage-c0fe9b78 + displayName: 编译 + strategy: naturally + trigger: auto + executor: + - mac520 + steps: + - step: build@maven + name: build_maven + displayName: Maven 构建 + jdkVersion: '8' + mavenVersion: 3.3.9 + commands: + - mvn -B clean package -Dmaven.test.skip=true + artifacts: + - name: BUILD_ARTIFACT + path: + - ./release + settings: [] + - name: stage-4d60b905 + displayName: 部署 + strategy: naturally + trigger: auto + executor: + - mac520 + steps: + - step: deploy@agent + name: deploy_agent + displayName: 主机部署 + hostGroupID: qiwen + deployArtifact: + - source: build + name: qiwen-file + target: ~/gitee_go/deploy/qiwen-file + dependArtifact: BUILD_ARTIFACT + script: |- + # 请在此输入部署脚本,如启动Java应用如下 + # nohup java -jar test.jar > nohup.out & + cd ~/gitee_go/deploy/qiwen-file + rm -r bin/ conf/ lib/ log/ + tar -zxvf qiwen-file.tar.gz + rm qiwen-file.tar.gz + cp -r ~/gitee_go/deploy/qiwen-file/release/* ~/gitee_go/deploy/qiwen-file + rm -r release + cp /home/qiwen-script/qiwen-file/application.properties conf/config/ + cp /home/qiwen-script/qiwen-file/settings.properties conf/config/ + cd bin + chmod -R 777 ./* + sh restart.sh + echo 'Hello Gitee!' +permissions: + - role: admin + members: [] diff --git a/.workflow/pipeline-20220517.yml b/.workflow/pipeline-20220517.yml new file mode 100644 index 0000000..19be63c --- /dev/null +++ b/.workflow/pipeline-20220517.yml @@ -0,0 +1,47 @@ +version: '1.0' +name: pipeline-20220517 +displayName: pipeline-20220517 +triggers: + trigger: manual +stages: + - name: stage-8109fa22 + displayName: 编译 + strategy: naturally + trigger: manual + executor: [] + steps: + - step: build@maven + name: build_maven + displayName: Maven 构建 + jdkVersion: '8' + mavenVersion: 3.3.9 + commands: + - mvn -B clean package -Dmaven.test.skip=true + artifacts: + - name: BUILD_ARTIFACT + path: + - ./target + settings: [] + - name: stage-285eb1b9 + displayName: 发布 + strategy: naturally + trigger: manual + executor: [] + steps: + - step: deploy@agent + name: deploy_agent + displayName: 主机部署 + hostGroupID: qiwen + deployArtifact: + - source: build + name: output + target: ~/gitee_go/deploy + dependArtifact: BUILD_ARTIFACT + script: |- + # 请在此输入部署脚本,如启动Java应用如下 + # nohup java -jar test.jar > nohup.out & + echo 'Hello Gitee!' +permissions: + - role: admin + members: + - mac520 diff --git a/pom.xml b/pom.xml index 3db48ec..798a269 100644 --- a/pom.xml +++ b/pom.xml @@ -6,11 +6,11 @@ com.qiwenshare qiwenshare - 1.2.0 + 1.2.1 qiwen-file - 1.2.0-SNAPSHOT + 1.2.1-SNAPSHOT qiwen-file pan.qiwenshare.com jar @@ -45,8 +45,8 @@ - com.alibaba - fastjson + com.alibaba.fastjson2 + fastjson2 @@ -86,12 +86,6 @@ - - - org.apache.shiro - shiro-core - - com.qiwenshare ufop-spring-boot-starter @@ -112,38 +106,25 @@ 2.0.1 - - com.inversoft - prime-jwt - 1.3.1 - commons-io commons-io 2.11.0 - - - - - org jaudiotagger - 2.0.1 com.github.stuxuhai jpinyin - 1.1.8 - @@ -175,6 +156,7 @@ + org.apache.maven.plugins maven-assembly-plugin diff --git a/src/main/java/com/qiwenshare/file/api/IUserFileService.java b/src/main/java/com/qiwenshare/file/api/IUserFileService.java index 1f0f863..0d1b9a3 100644 --- a/src/main/java/com/qiwenshare/file/api/IUserFileService.java +++ b/src/main/java/com/qiwenshare/file/api/IUserFileService.java @@ -13,8 +13,8 @@ public interface IUserFileService extends IService { List selectSameUserFile(String fileName, String filePath, String extendName, Long userId); IPage userFileList(Long userId, String filePath, Long beginCount, Long pageCount); - void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId); - void userFileCopy(String oldfilePath, String newfilePath, String fileName, String extendName, long userId); + void updateFilepathByUserFileId(String userFileId, String newfilePath, long userId); + void userFileCopy(String userFileId, String newfilePath, long userId); IPage getFileByFileType(Integer fileTypeId, Long currentPage, Long pageCount, long userId); List selectUserFileListByPath(String filePath, Long userId); diff --git a/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java b/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java index 7f4c358..f8c17bd 100644 --- a/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java +++ b/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java @@ -1,6 +1,6 @@ package com.qiwenshare.file.component; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qiwenshare.file.api.IFiletransferService; import com.qiwenshare.file.api.IRecoveryFileService; diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index 7ec5fa2..4ec7ed6 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -3,12 +3,13 @@ package com.qiwenshare.file.component; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; import co.elastic.clients.elasticsearch.ElasticsearchClient; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.stuxuhai.jpinyin.PinyinException; import com.github.stuxuhai.jpinyin.PinyinFormat; import com.github.stuxuhai.jpinyin.PinyinHelper; import com.qiwenshare.common.util.DateUtil; +import com.qiwenshare.common.util.HttpsUtils; import com.qiwenshare.file.api.IShareFileService; import com.qiwenshare.file.api.IShareService; import com.qiwenshare.file.api.IUserService; @@ -18,17 +19,13 @@ import com.qiwenshare.file.io.QiwenFile; import com.qiwenshare.file.mapper.FileMapper; import com.qiwenshare.file.mapper.MusicMapper; import com.qiwenshare.file.mapper.UserFileMapper; -import com.qiwenshare.file.util.HttpsUtils; import com.qiwenshare.file.util.QiwenFileUtil; import com.qiwenshare.file.util.TreeNode; -import com.qiwenshare.ufop.constant.StorageTypeEnum; import com.qiwenshare.ufop.factory.UFOPFactory; import com.qiwenshare.ufop.operation.copy.Copier; import com.qiwenshare.ufop.operation.copy.domain.CopyFile; import com.qiwenshare.ufop.operation.download.Downloader; import com.qiwenshare.ufop.operation.download.domain.DownloadFile; -import com.qiwenshare.ufop.operation.read.Reader; -import com.qiwenshare.ufop.operation.read.domain.ReadFile; import com.qiwenshare.ufop.operation.write.Writer; import com.qiwenshare.ufop.operation.write.domain.WriteFile; import com.qiwenshare.ufop.util.UFOPUtils; @@ -144,9 +141,8 @@ public class FileDealComp { * * @param sessionUserId */ - public void restoreParentFilePath(QiwenFile ufopFile1, Long sessionUserId) { + public void restoreParentFilePath(QiwenFile qiwenFile, Long sessionUserId) { - QiwenFile qiwenFile = new QiwenFile(ufopFile1.getPath(), ufopFile1.isDirectory()); if (qiwenFile.isFile()) { qiwenFile = qiwenFile.getParentFile(); } @@ -166,7 +162,11 @@ public class FileDealComp { try { userFileMapper.insert(userFile); } catch (Exception e) { - //ignore + if (e.getMessage().contains("Duplicate entry")) { + //ignore + } else { + log.error(e.getMessage()); + } } } qiwenFile = new QiwenFile(parentFilePath, true); @@ -549,8 +549,9 @@ public class FileDealComp { } public String getLyc(String singerName, String mp3Name) { - - String s = HttpsUtils.doGetString("https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?_=1651992748984&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&hostUin=0&is_xml=0&key=" + mp3Name.replaceAll(" ", "")); + Map headMap = new HashMap<>(); + headMap.put("Referer", "https://y.qq.com/"); + String s = HttpsUtils.doGetString("https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?_=1651992748984&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&hostUin=0&is_xml=0&key=" + mp3Name.replaceAll(" ", ""), headMap); Map map = JSON.parseObject(s, Map.class); Map data = (Map) map.get("data"); Map song = (Map) data.get("song"); @@ -603,7 +604,7 @@ public class FileDealComp { id = (String) item.get("id"); mid = (String) item.get("mid"); if (singer.equals(singerName) && mp3Name.equals(mp3name)) { - String res = HttpsUtils.doGetString("https://c.y.qq.com/v8/fcg-bin/musicmall.fcg?_=1652026128283&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&cmd=get_album_buy_page&albummid=" + mid + "&albumid=0"); + String res = HttpsUtils.doGetString("https://c.y.qq.com/v8/fcg-bin/musicmall.fcg?_=1652026128283&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&cmd=get_album_buy_page&albummid=" + mid + "&albumid=0", headMap); Map map1 = JSON.parseObject(res, Map.class); Map data1 = (Map) map1.get("data"); List list1 = (List) data1.get("songlist"); @@ -625,7 +626,7 @@ public class FileDealComp { String s1 = HttpsUtils.doGetString("https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?_=1651993218842&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&loginUin=0&" + "songmid="+mid+"&" + - "musicid=" + id); + "musicid=" + id, headMap); Map map1 = JSON.parseObject(s1, Map.class); return (String) map1.get("lyric"); } diff --git a/src/main/java/com/qiwenshare/file/component/JwtComp.java b/src/main/java/com/qiwenshare/file/component/JwtComp.java index 11a2254..6588e95 100644 --- a/src/main/java/com/qiwenshare/file/component/JwtComp.java +++ b/src/main/java/com/qiwenshare/file/component/JwtComp.java @@ -1,5 +1,6 @@ package com.qiwenshare.file.component; +import com.alibaba.fastjson2.JSON; import com.qiwenshare.common.util.math.CalculatorUtils; import com.qiwenshare.file.config.jwt.JwtProperties; import io.jsonwebtoken.Claims; @@ -7,13 +8,14 @@ import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.impl.DefaultClaims; -import org.apache.commons.net.util.Base64; +import org.apache.commons.codec.binary.Base64; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Date; +import java.util.Map; @Component public class JwtComp { @@ -32,8 +34,8 @@ public class JwtComp { } // 创建jwt - public String createJWT(String subject) throws Exception { - + public String createJWT(Map param) { + String subject = JSON.toJSONString(param); // 生成JWT的时间 long nowTime = System.currentTimeMillis(); Date nowDate = new Date(nowTime); diff --git a/src/main/java/com/qiwenshare/file/controller/CommonFileController.java b/src/main/java/com/qiwenshare/file/controller/CommonFileController.java index e58b48e..93f1c01 100644 --- a/src/main/java/com/qiwenshare/file/controller/CommonFileController.java +++ b/src/main/java/com/qiwenshare/file/controller/CommonFileController.java @@ -1,7 +1,7 @@ package com.qiwenshare.file.controller; import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.result.RestResult; @@ -10,7 +10,6 @@ import com.qiwenshare.common.util.security.SessionUtil; import com.qiwenshare.file.api.ICommonFileService; import com.qiwenshare.file.api.IFilePermissionService; import com.qiwenshare.file.api.IUserFileService; -import com.qiwenshare.file.constant.CommonFileTypeEnum; import com.qiwenshare.file.domain.CommonFile; import com.qiwenshare.file.domain.FilePermission; import com.qiwenshare.file.domain.UserFile; diff --git a/src/main/java/com/qiwenshare/file/controller/FileController.java b/src/main/java/com/qiwenshare/file/controller/FileController.java index 8556a3d..e366f0b 100644 --- a/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -5,7 +5,7 @@ import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.core.SearchResponse; import co.elastic.clients.elasticsearch.core.search.HighlighterEncoder; import co.elastic.clients.elasticsearch.core.search.Hit; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qiwenshare.common.anno.MyLog; @@ -235,7 +235,7 @@ public class FileController { } - @Operation(summary = "解压文件", description = "解压缩功能为体验功能,可以解压zip和rar格式的压缩文件,目前只支持本地存储文件解压,部分高版本rar格式不支持。", tags = {"file"}) + @Operation(summary = "解压文件", description = "解压文件。", tags = {"file"}) @RequestMapping(value = "/unzipfile", method = RequestMethod.POST) @MyLog(operation = "解压文件", module = CURRENT_MODULE) @ResponseBody @@ -264,7 +264,6 @@ public class FileController { String oldfilePath = userFile.getFilePath(); String newfilePath = copyFileDTO.getFilePath(); String fileName = userFile.getFileName(); - String extendName = userFile.getExtendName(); if (userFile.getIsDir() == 1) { QiwenFile qiwenFile = new QiwenFile(oldfilePath, fileName, true); if (newfilePath.startsWith(qiwenFile.getPath() + QiwenFile.separator) || newfilePath.equals(qiwenFile.getPath())) { @@ -272,7 +271,7 @@ public class FileController { } } - userFileService.userFileCopy(oldfilePath, newfilePath, fileName, extendName, sessionUserBean.getUserId()); + userFileService.userFileCopy(userFileId, newfilePath,sessionUserBean.getUserId()); fileDealComp.deleteRepeatSubDirFile(newfilePath, sessionUserBean.getUserId()); return RestResult.success(); @@ -285,11 +284,11 @@ public class FileController { public RestResult moveFile(@RequestBody MoveFileDTO moveFileDto) { JwtUser sessionUserBean = SessionUtil.getSession(); - - String oldfilePath = moveFileDto.getOldFilePath(); + UserFile userFile = userFileService.getById(moveFileDto.getUserFileId()); + String oldfilePath = userFile.getFilePath(); String newfilePath = moveFileDto.getFilePath(); - String fileName = moveFileDto.getFileName(); - String extendName = moveFileDto.getExtendName(); + String fileName = userFile.getFileName(); + String extendName = userFile.getExtendName(); if (StringUtil.isEmpty(extendName)) { QiwenFile qiwenFile = new QiwenFile(oldfilePath, fileName, true); if (newfilePath.startsWith(qiwenFile.getPath() + QiwenFile.separator) || newfilePath.equals(qiwenFile.getPath())) { @@ -297,7 +296,7 @@ public class FileController { } } - userFileService.updateFilepathByFilepath(oldfilePath, newfilePath, fileName, extendName, sessionUserBean.getUserId()); + userFileService.updateFilepathByUserFileId(moveFileDto.getUserFileId(), newfilePath, sessionUserBean.getUserId()); fileDealComp.deleteRepeatSubDirFile(newfilePath, sessionUserBean.getUserId()); return RestResult.success(); @@ -325,8 +324,7 @@ public class FileController { return RestResult.fail().message("原路径与目标路径冲突,不能移动"); } } - - userFileService.updateFilepathByFilepath(userFile.getFilePath(), newfilePath, userFile.getFileName(), userFile.getExtendName(), sessionUserBean.getUserId()); + userFileService.updateFilepathByUserFileId(userFile.getUserFileId(), newfilePath, sessionUserBean.getUserId()); } return RestResult.success().data("批量移动文件成功"); diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 031e73f..7d8a3f1 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -23,6 +23,7 @@ import com.qiwenshare.file.vo.file.UploadFileVo; import com.qiwenshare.ufop.factory.UFOPFactory; import com.qiwenshare.ufop.operation.download.Downloader; import com.qiwenshare.ufop.operation.download.domain.DownloadFile; +import com.qiwenshare.ufop.operation.download.domain.Range; import com.qiwenshare.ufop.util.UFOPUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -213,40 +214,49 @@ public class FiletransferController { } httpServletResponse.addHeader("Content-Disposition", "fileName=" + fileName);// 设置文件名 + String mime = MimeUtils.getMime(userFile.getExtendName()); + httpServletResponse.setHeader("Content-Type", mime); FileBean fileBean = fileService.getById(userFile.getFileId()); if ((UFOPUtils.isVideoFile(userFile.getExtendName()) || "mp3".equalsIgnoreCase(userFile.getExtendName()) || "flac".equalsIgnoreCase(userFile.getExtendName())) && !"true".equals(previewDTO.getIsMin())) { + //获取从那个字节开始读取文件 + String rangeString = httpServletRequest.getHeader("Range"); + int start = 0; + if (StringUtils.isNotBlank(rangeString)) { + start = Integer.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-"))); + } + Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType()); DownloadFile downloadFile = new DownloadFile(); downloadFile.setFileUrl(fileBean.getFileUrl()); + Range range = new Range(); + range.setStart(start); + range.setLength(1024 * 1024 * 1); + downloadFile.setRange(range); InputStream inputStream = downloader.getInputStream(downloadFile); - String mime = MimeUtils.getMime(userFile.getExtendName()); - httpServletResponse.setHeader("Content-Type", mime); - - //获取从那个字节开始读取文件 - String rangeString = httpServletRequest.getHeader("Range"); - int range = 0; - if (StringUtils.isNotBlank(rangeString)) { - range = Integer.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-"))); - } - //获取响应的输出流 OutputStream outputStream = httpServletResponse.getOutputStream(); - //返回码需要为206,代表只处理了部分请求,响应了部分数据 - httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); - // 每次请求只返回1MB的视频流 - byte[] bytes = new byte[1024 * 1024 * 5]; - inputStream.skip(range); - int len = IOUtils.read(inputStream, bytes); - //设置此次相应返回的数据长度 - httpServletResponse.setContentLength(len); - httpServletResponse.setHeader("Accept-Ranges", "bytes"); - //设置此次相应返回的数据范围 - httpServletResponse.setHeader("Content-Range", "bytes " + range + "-" + (fileBean.getFileSize() - 1) + "/" + fileBean.getFileSize()); - // 将这1MB的视频流响应给客户端 - outputStream.write(bytes, 0, len); - outputStream.close(); + try { + + //返回码需要为206,代表只处理了部分请求,响应了部分数据 + httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + // 每次请求只返回1MB的视频流 + + httpServletResponse.setHeader("Accept-Ranges", "bytes"); + //设置此次相应返回的数据范围 + httpServletResponse.setHeader("Content-Range", "bytes " + start + "-" + (fileBean.getFileSize() - 1) + "/" + fileBean.getFileSize()); + IOUtils.copy(inputStream, outputStream); + + + } finally { + IOUtils.closeQuietly(inputStream); + IOUtils.closeQuietly(outputStream); + if (downloadFile.getOssClient() != null) { + downloadFile.getOssClient().shutdown(); + } + } + } else { filetransferService.previewFile(httpServletResponse, previewDTO); } diff --git a/src/main/java/com/qiwenshare/file/controller/OfficeController.java b/src/main/java/com/qiwenshare/file/controller/OfficeController.java index c9af9da..1661faf 100644 --- a/src/main/java/com/qiwenshare/file/controller/OfficeController.java +++ b/src/main/java/com/qiwenshare/file/controller/OfficeController.java @@ -1,8 +1,8 @@ package com.qiwenshare.file.controller; import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.ClassUtils; import com.qiwenshare.common.exception.NotLoginException; @@ -147,16 +147,17 @@ public class OfficeController { UserFile userFile = userFileService.getById(previewOfficeFileDTO.getUserFileId()); String baseUrl = request.getScheme()+"://"+ deploymentHost + ":" + port + request.getContextPath(); - - FileModel file = new FileModel(userFile.getFileName() + "." + userFile.getExtendName(), + String query = "?type=show&token="+token; + String callbackUrl = baseUrl + "/office/IndexServlet" + query; + FileModel file = new FileModel(userFile.getUserFileId(), + userFile.getFileName() + "." + userFile.getExtendName(), previewOfficeFileDTO.getPreviewUrl(), userFile.getUploadTime(), String.valueOf(loginUser.getUserId()), loginUser.getUsername(), + callbackUrl, "view"); - String query = "?type=show&token="+token; - file.editorConfig.callbackUrl= baseUrl + "/office/IndexServlet" + query; JSONObject jsonObject = new JSONObject(); jsonObject.put("file",file); jsonObject.put("docserviceApiUrl", ConfigManager.GetProperty("files.docservice.url.site") + ConfigManager.GetProperty("files.docservice.url.api")); @@ -185,17 +186,17 @@ public class OfficeController { String baseUrl = request.getScheme()+"://"+ deploymentHost + ":" + port + request.getContextPath(); log.info("回调地址baseUrl:" + baseUrl); + String query = "?type=edit&userFileId="+userFile.getUserFileId()+"&token="+token; + String callbackUrl = baseUrl + "/office/IndexServlet" + query; - FileModel file = new FileModel(userFile.getFileName() + "." + userFile.getExtendName(), + FileModel file = new FileModel(userFile.getUserFileId(), + userFile.getFileName() + "." + userFile.getExtendName(), editOfficeFileDTO.getPreviewUrl(), userFile.getUploadTime(), String.valueOf(loginUser.getUserId()), loginUser.getUsername(), + callbackUrl, "edit"); - file.changeType(request.getParameter("mode"), "edit"); - - String query = "?type=edit&userFileId="+userFile.getUserFileId()+"&token="+token; - file.editorConfig.callbackUrl= baseUrl + "/office/IndexServlet" + query; JSONObject jsonObject = new JSONObject(); jsonObject.put("file",file); diff --git a/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java b/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java index 771a517..39de806 100644 --- a/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java +++ b/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java @@ -1,6 +1,6 @@ package com.qiwenshare.file.controller; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.security.JwtUser; diff --git a/src/main/java/com/qiwenshare/file/controller/ShareController.java b/src/main/java/com/qiwenshare/file/controller/ShareController.java index 74a3a96..9cfa58b 100644 --- a/src/main/java/com/qiwenshare/file/controller/ShareController.java +++ b/src/main/java/com/qiwenshare/file/controller/ShareController.java @@ -3,7 +3,7 @@ package com.qiwenshare.file.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.result.RestResult; diff --git a/src/main/java/com/qiwenshare/file/controller/TaskController.java b/src/main/java/com/qiwenshare/file/controller/TaskController.java index ada7a75..9c1af99 100644 --- a/src/main/java/com/qiwenshare/file/controller/TaskController.java +++ b/src/main/java/com/qiwenshare/file/controller/TaskController.java @@ -7,7 +7,6 @@ import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.domain.ShareFile; import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.io.QiwenFile; -import com.qiwenshare.file.service.ShareFileService; import com.qiwenshare.file.service.UserFileService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/qiwenshare/file/controller/UserController.java b/src/main/java/com/qiwenshare/file/controller/UserController.java index 9b52fed..c93d21a 100644 --- a/src/main/java/com/qiwenshare/file/controller/UserController.java +++ b/src/main/java/com/qiwenshare/file/controller/UserController.java @@ -1,11 +1,11 @@ package com.qiwenshare.file.controller; import cn.hutool.core.bean.BeanUtil; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.DateUtil; +import com.qiwenshare.common.util.HashUtils; import com.qiwenshare.common.util.security.JwtUser; import com.qiwenshare.common.util.security.SessionUtil; import com.qiwenshare.file.api.IUserLoginInfoService; @@ -19,7 +19,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.crypto.hash.SimpleHash; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -68,8 +67,7 @@ public class UserController { @Parameter(description = "登录密码") String password){ RestResult restResult = new RestResult(); String salt = userService.getSaltByTelephone(telephone); - String hashPassword = new SimpleHash("MD5", password, salt, 1024).toHex(); - + String hashPassword = HashUtils.hashHex("MD5", password, salt, 1024); UserBean result = userService.selectUserByTelephoneAndPassword(telephone, hashPassword); if (result == null) { return RestResult.fail().message("手机号或密码错误!"); @@ -79,7 +77,7 @@ public class UserController { param.put("userId", result.getUserId()); String token = ""; try { - token = jwtComp.createJWT(JSON.toJSONString(param)); + token = jwtComp.createJWT(param); } catch (Exception e) { log.info("登录失败:{}", e); return RestResult.fail().message("创建token失败!"); @@ -98,7 +96,6 @@ public class UserController { } - @Operation(summary = "检查用户登录信息", description = "验证token的有效性", tags = {"user"}) @GetMapping("/checkuserlogininfo") @ResponseBody diff --git a/src/main/java/com/qiwenshare/file/domain/UserFile.java b/src/main/java/com/qiwenshare/file/domain/UserFile.java index f82774a..e6fc7c3 100644 --- a/src/main/java/com/qiwenshare/file/domain/UserFile.java +++ b/src/main/java/com/qiwenshare/file/domain/UserFile.java @@ -12,7 +12,7 @@ import javax.persistence.*; @Data @Table(name = "userfile", uniqueConstraints = { - @UniqueConstraint(name = "fileindex", columnNames = { "userId", "filePath", "fileName", "extendName", "deleteFlag"})} + @UniqueConstraint(name = "fileindex", columnNames = { "userId", "filePath", "fileName", "extendName", "deleteFlag", "isDir"})} ) @Entity @TableName("userfile") @@ -35,7 +35,7 @@ public class UserFile { @Column(columnDefinition="varchar(500) comment '文件路径'") private String filePath; - @Column(columnDefinition="varchar(100) comment '扩展名'") + @Column(columnDefinition="varchar(100) NULL DEFAULT '' comment '扩展名'") private String extendName; @Column(columnDefinition="int(1) comment '是否是目录(0-否,1-是)'") @@ -66,4 +66,12 @@ public class UserFile { this.deleteFlag = 0; } + public boolean isDirectory() { + return this.isDir == 1; + } + + public boolean isFile() { + return this.isDir == 0; + } + } diff --git a/src/main/java/com/qiwenshare/file/dto/file/MoveFileDTO.java b/src/main/java/com/qiwenshare/file/dto/file/MoveFileDTO.java index e4daf1d..d586bef 100644 --- a/src/main/java/com/qiwenshare/file/dto/file/MoveFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/file/MoveFileDTO.java @@ -6,16 +6,17 @@ import lombok.Data; @Data @Schema(name = "移动文件DTO",required = true) public class MoveFileDTO { - + @Schema(description = "用户文件id", required = true) + private String userFileId; @Schema(description = "文件路径", required = true) private String filePath; - - @Schema(description = "文件名", required = true) - private String fileName; - - @Schema(description = "旧文件名", required = true) - private String oldFilePath; - @Schema(description = "扩展名", required = true) - private String extendName; +// +// @Schema(description = "文件名", required = true) +// private String fileName; +// +// @Schema(description = "旧文件名", required = true) +// private String oldFilePath; +// @Schema(description = "扩展名", required = true) +// private String extendName; } diff --git a/src/main/java/com/qiwenshare/file/helper/DocumentManager.java b/src/main/java/com/qiwenshare/file/helper/DocumentManager.java index 0ffdb9f..6c5255f 100644 --- a/src/main/java/com/qiwenshare/file/helper/DocumentManager.java +++ b/src/main/java/com/qiwenshare/file/helper/DocumentManager.java @@ -19,15 +19,12 @@ package com.qiwenshare.file.helper; +import com.alibaba.fastjson2.JSONObject; +import com.qiwenshare.file.component.JwtComp; +import com.qiwenshare.file.service.OfficeConverterService; +import org.springframework.stereotype.Component; -import com.alibaba.fastjson.JSONObject; -import com.qiwenshare.file.constant.FileType; -import org.primeframework.jwt.Signer; -import org.primeframework.jwt.Verifier; -import org.primeframework.jwt.domain.JWT; -import org.primeframework.jwt.hmac.HMACSigner; -import org.primeframework.jwt.hmac.HMACVerifier; - +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -38,8 +35,13 @@ import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; +@Component public class DocumentManager { + @Resource + private JwtComp jwtComp; + @Resource + private OfficeConverterService officeConverterService; private static HttpServletRequest request; public static void Init(HttpServletRequest req, HttpServletResponse resp) @@ -229,7 +231,7 @@ public class DocumentManager File meta = new File(histDir + File.separator + "createdInfo.json"); try (FileWriter writer = new FileWriter(meta)) { - json.writeJSONString(writer); +// json.writeJSONString(writer); } } @@ -290,13 +292,13 @@ public class DocumentManager } } - public static ArrayList> GetFilesInfo(){ + public ArrayList> GetFilesInfo(){ ArrayList> files = new ArrayList<>(); for(File file : GetStoredFiles(null)){ Map map = new LinkedHashMap<>(); map.put("version", GetFileVersion(file.getName(), null)); - map.put("id", ServiceConverter.GenerateRevisionId(CurUserHostAddress(null) + "/" + file.getName() + "/" + Long.toString(new File(StoragePath(file.getName(), null)).lastModified()))); + map.put("id", officeConverterService.GenerateRevisionId(CurUserHostAddress(null) + "/" + file.getName() + "/" + Long.toString(new File(StoragePath(file.getName(), null)).lastModified()))); map.put("contentLength", new BigDecimal(String.valueOf((file.length()/1024.0))).setScale(2, RoundingMode.HALF_UP) + " KB"); map.put("pureContentLength", file.length()); map.put("title", file.getName()); @@ -307,7 +309,7 @@ public class DocumentManager return files; } - public static ArrayList> GetFilesInfo(String fileId){ + public ArrayList> GetFilesInfo(String fileId){ ArrayList> file = new ArrayList<>(); for (Map map : GetFilesInfo()){ @@ -356,50 +358,52 @@ public class DocumentManager } } - public static String GetInternalExtension(FileType fileType) - { - if (fileType.equals(FileType.Word)) - return ".docx"; +// public static String GetInternalExtension(FileType fileType) +// { +// if (fileType.equals(FileType.Word)) +// return ".docx"; +// +// if (fileType.equals(FileType.Cell)) +// return ".xlsx"; +// +// if (fileType.equals(FileType.Slide)) +// return ".pptx"; +// +// return ".docx"; +// } - if (fileType.equals(FileType.Cell)) - return ".xlsx"; - - if (fileType.equals(FileType.Slide)) - return ".pptx"; - - return ".docx"; - } - - public static String CreateToken(Map payloadClaims) - { - try - { - Signer signer = HMACSigner.newSHA256Signer(GetTokenSecret()); - JWT jwt = new JWT(); - for (String key : payloadClaims.keySet()) - { - jwt.addClaim(key, payloadClaims.get(key)); - } - return JWT.getEncoder().encode(jwt, signer); - } - catch (Exception e) - { - return ""; - } - } - - public static JWT ReadToken(String token) - { - try - { - Verifier verifier = HMACVerifier.newVerifier(GetTokenSecret()); - return JWT.getDecoder().decode(token, verifier); - } - catch (Exception exception) - { - return null; - } - } +// public static String CreateToken(Map payloadClaims) +// { +// jwtComp.createJWT(payloadClaims); +// +// try +// { +// Signer signer = HMACSigner.newSHA256Signer(GetTokenSecret()); +// JWT jwt = new JWT(); +// for (String key : payloadClaims.keySet()) +// { +// jwt.addClaim(key, payloadClaims.get(key)); +// } +// return JWT.getEncoder().encode(jwt, signer); +// } +// catch (Exception e) +// { +// return ""; +// } +// } +// +// public static JWT ReadToken(String token) +// { +// try +// { +// Verifier verifier = HMACVerifier.newVerifier(GetTokenSecret()); +// return JWT.getDecoder().decode(token, verifier); +// } +// catch (Exception exception) +// { +// return null; +// } +// } public static Boolean TokenEnabled() { diff --git a/src/main/java/com/qiwenshare/file/helper/TrackManager.java b/src/main/java/com/qiwenshare/file/helper/TrackManager.java index e4edf2f..bad032d 100644 --- a/src/main/java/com/qiwenshare/file/helper/TrackManager.java +++ b/src/main/java/com/qiwenshare/file/helper/TrackManager.java @@ -18,24 +18,33 @@ package com.qiwenshare.file.helper; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.google.gson.Gson; -import org.primeframework.jwt.domain.JWT; +import com.qiwenshare.file.component.JwtComp; +import com.qiwenshare.file.service.OfficeConverterService; +import io.jsonwebtoken.Claims; +import org.springframework.stereotype.Component; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Scanner; +@Component public class TrackManager { + @Resource + private JwtComp jwtComp; + @Resource + private OfficeConverterService officeConverterService; private static final String DocumentJwtHeader = ConfigManager.GetProperty("files.docservice.header"); - public static JSONObject readBody(HttpServletRequest request, PrintWriter writer) throws Exception { + public JSONObject readBody(HttpServletRequest request, PrintWriter writer) throws Exception { String bodyString = ""; try { @@ -78,37 +87,45 @@ public class TrackManager { throw new Exception("{\"error\":1,\"message\":\"JWT expected\"}"); } - JWT jwt = DocumentManager.ReadToken(token); - if (jwt == null) { - writer.write("{\"error\":1,\"message\":\"JWT validation failed\"}"); - throw new Exception("{\"error\":1,\"message\":\"JWT validation failed\"}"); - } - - if (jwt.getObject("payload") != null) { - try { - @SuppressWarnings("unchecked") LinkedHashMap payload = - (LinkedHashMap)jwt.getObject("payload"); - - jwt.claims = payload; - } catch (Exception ex) { - writer.write("{\"error\":1,\"message\":\"Wrong payload\"}"); - throw ex; - } - } - + Claims claims = jwtComp.parseJWT(token); try { - Gson gson = new Gson(); - body = JSONObject.parseObject(gson.toJson(jwt.claims)); + body = JSONObject.parseObject(JSON.toJSONString(claims)); } catch (Exception ex) { writer.write("JSONParser.parse error:" + ex.getMessage()); throw ex; } + + + if (body == null) { + writer.write("{\"error\":1,\"message\":\"JWT validation failed\"}"); + throw new Exception("{\"error\":1,\"message\":\"JWT validation failed\"}"); + } + +// if (jwt.getObject("payload") != null) { +// try { +// @SuppressWarnings("unchecked") LinkedHashMap payload = +// (LinkedHashMap)jwt.getObject("payload"); +// +// jwt.claims = payload; +// } catch (Exception ex) { +// writer.write("{\"error\":1,\"message\":\"Wrong payload\"}"); +// throw ex; +// } +// } +// +// try { +// Gson gson = new Gson(); +// body = JSONObject.parseObject(gson.toJson(jwt.claims)); +// } catch (Exception ex) { +// writer.write("JSONParser.parse error:" + ex.getMessage()); +// throw ex; +// } } return body; } - public static void processSave(JSONObject body, String fileName, String userAddress) throws Exception { + public void processSave(JSONObject body, String fileName, String userAddress) throws Exception { String downloadUri = (String) body.get("url"); String changesUri = (String) body.get("changesurl"); String key = (String) body.get("key"); @@ -119,7 +136,7 @@ public class TrackManager { if (!curExt.equals(downloadExt)) { try { - String newFileUri = ServiceConverter.GetConvertedUri(downloadUri, downloadExt, curExt, ServiceConverter.GenerateRevisionId(downloadUri), null, false); + String newFileUri = officeConverterService.GetConvertedUri(downloadUri, downloadExt, curExt, officeConverterService.GenerateRevisionId(downloadUri), null, false); if (newFileUri.isEmpty()) { newFileName = DocumentManager.GetCorrectName(FileUtility.GetFileNameWithoutExtension(fileName) + downloadExt, userAddress); } else { @@ -167,7 +184,7 @@ public class TrackManager { } } - public static void processForceSave(JSONObject body, String fileName, String userAddress) throws Exception { + public void processForceSave(JSONObject body, String fileName, String userAddress) throws Exception { String downloadUri = (String) body.get("url"); @@ -177,7 +194,7 @@ public class TrackManager { if (!curExt.equals(downloadExt)) { try { - String newFileUri = ServiceConverter.GetConvertedUri(downloadUri, downloadExt, curExt, ServiceConverter.GenerateRevisionId(downloadUri), null, false); + String newFileUri = officeConverterService.GetConvertedUri(downloadUri, downloadExt, curExt, officeConverterService.GenerateRevisionId(downloadUri), null, false); if (newFileUri.isEmpty()) { newFileName = true; } else { @@ -249,7 +266,7 @@ public class TrackManager { connection.disconnect(); } - public static void commandRequest(String method, String key) throws Exception { + public void commandRequest(String method, String key) throws Exception { String DocumentCommandUrl = ConfigManager.GetProperty("files.docservice.url.site") + ConfigManager.GetProperty("files.docservice.url.command"); URL url = new URL(DocumentCommandUrl); @@ -264,11 +281,11 @@ public class TrackManager { { Map payloadMap = new HashMap(); payloadMap.put("payload", params); - headerToken = DocumentManager.CreateToken(payloadMap); + headerToken = jwtComp.createJWT(payloadMap); connection.setRequestProperty(DocumentJwtHeader.equals("") ? "Authorization" : DocumentJwtHeader, "Bearer " + headerToken); - String token = DocumentManager.CreateToken(params); + String token = jwtComp.createJWT(params); params.put("token", token); } @@ -290,10 +307,10 @@ public class TrackManager { if (stream == null) throw new Exception("Could not get an answer"); - String jsonString = ServiceConverter.ConvertStreamToString(stream); + String jsonString = officeConverterService.ConvertStreamToString(stream); connection.disconnect(); - JSONObject response = ServiceConverter.ConvertStringToJSON(jsonString); + JSONObject response = officeConverterService.ConvertStringToJSON(jsonString); if (!response.get("error").toString().equals("0")){ throw new Exception(response.toJSONString()); } diff --git a/src/main/java/com/qiwenshare/file/service/FileService.java b/src/main/java/com/qiwenshare/file/service/FileService.java index a911286..9b8ad21 100644 --- a/src/main/java/com/qiwenshare/file/service/FileService.java +++ b/src/main/java/com/qiwenshare/file/service/FileService.java @@ -1,7 +1,7 @@ package com.qiwenshare.file.service; import cn.hutool.core.bean.BeanUtil; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index ea41934..7645bde 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -1,13 +1,8 @@ package com.qiwenshare.file.service; -import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.github.stuxuhai.jpinyin.PinyinException; -import com.github.stuxuhai.jpinyin.PinyinFormat; -import com.github.stuxuhai.jpinyin.PinyinHelper; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.MimeUtils; import com.qiwenshare.common.util.security.JwtUser; @@ -20,7 +15,6 @@ import com.qiwenshare.file.dto.file.PreviewDTO; import com.qiwenshare.file.dto.file.UploadFileDTO; import com.qiwenshare.file.io.QiwenFile; import com.qiwenshare.file.mapper.*; -import com.qiwenshare.file.util.HttpsUtils; import com.qiwenshare.file.util.QiwenFileUtil; import com.qiwenshare.file.vo.file.UploadFileVo; import com.qiwenshare.ufop.constant.StorageTypeEnum; @@ -28,8 +22,6 @@ import com.qiwenshare.ufop.constant.UploadFileStatusEnum; import com.qiwenshare.ufop.exception.operation.DownloadException; import com.qiwenshare.ufop.exception.operation.UploadException; import com.qiwenshare.ufop.factory.UFOPFactory; -import com.qiwenshare.ufop.operation.copy.Copier; -import com.qiwenshare.ufop.operation.copy.domain.CopyFile; import com.qiwenshare.ufop.operation.delete.Deleter; import com.qiwenshare.ufop.operation.delete.domain.DeleteFile; import com.qiwenshare.ufop.operation.download.Downloader; @@ -42,26 +34,8 @@ import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult; import com.qiwenshare.ufop.util.UFOPUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.jaudiotagger.audio.AudioFile; -import org.jaudiotagger.audio.AudioFileIO; -import org.jaudiotagger.audio.AudioHeader; -import org.jaudiotagger.audio.exceptions.CannotReadException; -import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; -import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; -import org.jaudiotagger.audio.flac.FlacFileReader; -import org.jaudiotagger.audio.mp3.MP3AudioHeader; -import org.jaudiotagger.audio.mp3.MP3File; -import org.jaudiotagger.tag.FieldKey; -import org.jaudiotagger.tag.Tag; -import org.jaudiotagger.tag.TagException; -import org.jaudiotagger.tag.TagField; -import org.jaudiotagger.tag.id3.AbstractID3v2Frame; -import org.jaudiotagger.tag.id3.AbstractID3v2Tag; -import org.jaudiotagger.tag.id3.framebody.FrameBodyAPIC; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import sun.nio.cs.ext.GBK; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -70,7 +44,10 @@ import java.awt.image.BufferedImage; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.zip.Adler32; import java.util.zip.CheckedOutputStream; @@ -98,8 +75,6 @@ public class FiletransferService implements IFiletransferService { UploadTaskMapper uploadTaskMapper; @Resource ImageMapper imageMapper; - @Resource - MusicMapper musicMapper; @Resource PictureFileMapper pictureFileMapper; @@ -125,11 +100,6 @@ public class FiletransferService implements IFiletransferService { if (list != null && !list.isEmpty()) { FileBean file = list.get(0); - if (relativePath.contains("/")) { - fileDealComp.restoreParentFilePath(qiwenFile, sessionUserBean.getUserId()); - fileDealComp.deleteRepeatSubDirFile(uploadFileDTO.getFilePath(), sessionUserBean.getUserId()); - } - UserFile userFile = new UserFile(qiwenFile, sessionUserBean.getUserId(), file.getFileId()); UserFile param1 = QiwenFileUtil.searchQiwenFileParam(userFile); List userFileList = userFileMapper.selectList(new QueryWrapper<>(param1)); @@ -137,6 +107,9 @@ public class FiletransferService implements IFiletransferService { userFileMapper.insert(userFile); fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); } + if (relativePath.contains("/")) { + fileDealComp.restoreParentFilePath(qiwenFile, sessionUserBean.getUserId()); + } uploadFileVo.setSkipUpload(true); } else { @@ -188,7 +161,7 @@ public class FiletransferService implements IFiletransferService { uploadFileResultList = uploader.upload(request, uploadFile); } catch (Exception e) { log.error("上传失败,请检查UFOP连接配置是否正确"); - throw new UploadException("上传失败"); + throw new UploadException("上传失败", e); } for (int i = 0; i < uploadFileResultList.size(); i++){ UploadFileResult uploadFileResult = uploadFileResultList.get(i); @@ -208,10 +181,7 @@ public class FiletransferService implements IFiletransferService { UserFile userFile = new UserFile(qiwenFile, userId, fileBean.getFileId()); - if (relativePath.contains("/")) { - fileDealComp.restoreParentFilePath(qiwenFile, userId); - fileDealComp.deleteRepeatSubDirFile(uploadFileDto.getFilePath(), userId); - } + UserFile param = QiwenFileUtil.searchQiwenFileParam(userFile); List userFileList = userFileMapper.selectList(new QueryWrapper<>(param)); @@ -221,6 +191,10 @@ public class FiletransferService implements IFiletransferService { } userFileMapper.insert(userFile); + if (relativePath.contains("/")) { + fileDealComp.restoreParentFilePath(qiwenFile, userId); + } + fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); @@ -306,8 +280,8 @@ public class FiletransferService implements IFiletransferService { downloader.download(httpServletResponse, downloadFile); } else { - List userFileList = userFileMapper.selectUserFileByLikeRightFilePath(userFile.getFilePath() + "/" + userFile.getFileName() - , userFile.getUserId()); + QiwenFile qiwenFile = new QiwenFile(userFile.getFilePath(), userFile.getFileName(), true); + List userFileList = userFileMapper.selectUserFileByLikeRightFilePath(qiwenFile.getPath() , userFile.getUserId()); List userFileIds = userFileList.stream().map(UserFile::getUserFileId).collect(Collectors.toList()); downloadUserFileList(httpServletResponse, userFile.getFilePath(), userFile.getFileName(), userFileIds); diff --git a/src/main/java/com/qiwenshare/file/helper/ServiceConverter.java b/src/main/java/com/qiwenshare/file/service/OfficeConverterService.java similarity index 91% rename from src/main/java/com/qiwenshare/file/helper/ServiceConverter.java rename to src/main/java/com/qiwenshare/file/service/OfficeConverterService.java index f73c48a..3986b39 100644 --- a/src/main/java/com/qiwenshare/file/helper/ServiceConverter.java +++ b/src/main/java/com/qiwenshare/file/service/OfficeConverterService.java @@ -16,10 +16,17 @@ * */ -package com.qiwenshare.file.helper; +package com.qiwenshare.file.service; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSONObject; import com.google.gson.Gson; +import com.qiwenshare.file.component.JwtComp; +import com.qiwenshare.file.helper.ConfigManager; +import com.qiwenshare.file.helper.DocumentManager; +import com.qiwenshare.file.helper.FileUtility; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; import java.io.*; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -28,8 +35,11 @@ import java.util.Map; import java.util.UUID; -public class ServiceConverter +@Component +public class OfficeConverterService { + @Resource + private JwtComp jwtComp; private static int ConvertTimeout = 120000; private static final String DocumentConverterUrl = ConfigManager.GetProperty("files.docservice.url.site") + ConfigManager.GetProperty("files.docservice.url.converter"); private static final String DocumentJwtHeader = ConfigManager.GetProperty("files.docservice.header"); @@ -61,7 +71,7 @@ public class ServiceConverter } } - public static String GetConvertedUri(String documentUri, String fromExtension, String toExtension, String documentRevisionId, String filePass, Boolean isAsync) throws Exception + public String GetConvertedUri(String documentUri, String fromExtension, String toExtension, String documentRevisionId, String filePass, Boolean isAsync) throws Exception { fromExtension = fromExtension == null || fromExtension.isEmpty() ? FileUtility.GetFileExtension(documentUri) : fromExtension; @@ -95,12 +105,12 @@ public class ServiceConverter if (isAsync) map.put("async", body.async); - String token = DocumentManager.CreateToken(map); + String token = jwtComp.createJWT(map); body.token = token; Map payloadMap = new HashMap(); payloadMap.put("payload", map); - headerToken = DocumentManager.CreateToken(payloadMap); + headerToken = jwtComp.createJWT(payloadMap); } Gson gson = new Gson(); diff --git a/src/main/java/com/qiwenshare/file/service/ShareFileService.java b/src/main/java/com/qiwenshare/file/service/ShareFileService.java index cb12a60..df5fa04 100644 --- a/src/main/java/com/qiwenshare/file/service/ShareFileService.java +++ b/src/main/java/com/qiwenshare/file/service/ShareFileService.java @@ -1,6 +1,6 @@ package com.qiwenshare.file.service; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qiwenshare.file.api.IShareFileService; diff --git a/src/main/java/com/qiwenshare/file/service/UserFileService.java b/src/main/java/com/qiwenshare/file/service/UserFileService.java index 7bb1084..6f57571 100644 --- a/src/main/java/com/qiwenshare/file/service/UserFileService.java +++ b/src/main/java/com/qiwenshare/file/service/UserFileService.java @@ -4,7 +4,6 @@ import cn.hutool.core.net.URLDecoder; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -18,20 +17,15 @@ import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.domain.RecoveryFile; import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.io.QiwenFile; -import com.qiwenshare.file.mapper.FileMapper; -import com.qiwenshare.file.mapper.FileTypeMapper; import com.qiwenshare.file.mapper.RecoveryFileMapper; import com.qiwenshare.file.mapper.UserFileMapper; -import com.qiwenshare.file.util.QiwenFileUtil; import com.qiwenshare.file.vo.file.FileListVo; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.Executor; @@ -39,17 +33,13 @@ import java.util.concurrent.Executors; @Slf4j @Service -@Transactional(rollbackFor=Exception.class) -public class UserFileService extends ServiceImpl implements IUserFileService { +@Transactional(rollbackFor = Exception.class) +public class UserFileService extends ServiceImpl implements IUserFileService { @Resource UserFileMapper userFileMapper; @Resource - FileMapper fileMapper; - @Resource RecoveryFileMapper recoveryFileMapper; @Resource - FileTypeMapper fileTypeMapper; - @Resource FileDealComp fileDealComp; public static Executor executor = Executors.newFixedThreadPool(20); @@ -94,32 +84,23 @@ public class UserFileService extends ServiceImpl impl } @Override - public void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) { + public void updateFilepathByUserFileId(String userFileId, String newfilePath, long userId) { + UserFile userFile = userFileMapper.selectById(userFileId); + String oldfilePath = userFile.getFilePath(); + String fileName = userFile.getFileName(); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("userId", userId) - .eq("filePath", oldfilePath).eq("fileName", fileName); - if (extendName == null) { - queryWrapper.eq("isDir", 1); - } else { - queryWrapper.eq("extendName", extendName); - } - queryWrapper.eq("deleteFlag", 0); - List userFileList = userFileMapper.selectList(queryWrapper); - for (UserFile userFile : userFileList) { - userFile.setFilePath(newfilePath); - if (userFile.getIsDir() == 0) { - String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); - userFile.setFileName(repeatFileName); - } - userFileMapper.updateById(userFile); + userFile.setFilePath(newfilePath); + if (userFile.getIsDir() == 0) { + String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); + userFile.setFileName(repeatFileName); } + userFileMapper.updateById(userFile); //移动子目录 oldfilePath = new QiwenFile(oldfilePath, fileName, true).getPath(); newfilePath = new QiwenFile(newfilePath, fileName, true).getPath(); - if (StringUtils.isEmpty(extendName)) { //为空说明是目录,则需要移动子目录 + if (userFile.isDirectory()) { //为空说明是目录,则需要移动子目录 List list = selectUserFileByLikeRightFilePath(oldfilePath, userId); for (UserFile newUserFile : list) { @@ -135,43 +116,34 @@ public class UserFileService extends ServiceImpl impl } @Override - public void userFileCopy(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) { + public void userFileCopy(String userFileId, String newfilePath, long userId) { + UserFile userFile = userFileMapper.selectById(userFileId); + String oldfilePath = userFile.getFilePath(); + String fileName = userFile.getFileName(); - QueryWrapper queryWrapper = new QueryWrapper() - .eq("userId", userId) - .eq("filePath", oldfilePath).eq("fileName", fileName); - if (extendName == null) { - queryWrapper.eq("isDir", 1); - } else { - queryWrapper.eq("extendName", extendName); - } - queryWrapper.eq("deleteFlag", 0); - List userFileList = userFileMapper.selectList(queryWrapper); - for (UserFile userFile : userFileList) { - userFile.setFilePath(newfilePath); - userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); - if (userFile.getIsDir() == 0) { - String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); - userFile.setFileName(repeatFileName); - } - userFileMapper.insert(userFile); + userFile.setFilePath(newfilePath); + userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); + if (userFile.getIsDir() == 0) { + String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); + userFile.setFileName(repeatFileName); } + userFileMapper.insert(userFile); oldfilePath = new QiwenFile(oldfilePath, fileName, true).getPath(); newfilePath = new QiwenFile(newfilePath, fileName, true).getPath(); - if (extendName == null) { //为null说明是目录,则需要移动子目录 + if (userFile.isDirectory()) { //为null说明是目录,则需要移动子目录 List subUserFileList = userFileMapper.selectUserFileByLikeRightFilePath(oldfilePath, userId); - for (UserFile userFile : subUserFileList) { - userFile.setFilePath(userFile.getFilePath().replaceFirst(oldfilePath, newfilePath)); - userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); - if (userFile.getIsDir() == 0) { - String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); - userFile.setFileName(repeatFileName); + for (UserFile newUserFile : subUserFileList) { + newUserFile.setFilePath(newUserFile.getFilePath().replaceFirst(oldfilePath, newfilePath)); + newUserFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); + if (!newUserFile.isFile()) { + String repeatFileName = fileDealComp.getRepeatFileName(newUserFile, newUserFile.getFilePath()); + newUserFile.setFileName(repeatFileName); } - userFileMapper.insert(userFile); + userFileMapper.insert(newUserFile); } } @@ -221,7 +193,7 @@ public class UserFileService extends ServiceImpl impl String filePath = new QiwenFile(userFile.getFilePath(), userFile.getFileName(), true).getPath(); updateFileDeleteStateByFilePath(filePath, uuid, sessionUserId); - }else{ + } else { UserFile userFileTemp = userFileMapper.selectById(userFileId); LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, RandomUtil.randomInt(1, FileConstant.deleteFileRandomSize)) @@ -248,16 +220,16 @@ public class UserFileService extends ServiceImpl impl private void updateFileDeleteStateByFilePath(String filePath, String deleteBatchNum, Long userId) { executor.execute(() -> { List fileList = selectUserFileByLikeRightFilePath(filePath, userId); - for (int i = 0; i < fileList.size(); i++){ + for (int i = 0; i < fileList.size(); i++) { UserFile userFileTemp = fileList.get(i); - //标记删除标志 - LambdaUpdateWrapper userFileLambdaUpdateWrapper1 = new LambdaUpdateWrapper<>(); - userFileLambdaUpdateWrapper1.set(UserFile::getDeleteFlag, RandomUtil.randomInt(FileConstant.deleteFileRandomSize)) - .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) - .set(UserFile::getDeleteBatchNum, deleteBatchNum) - .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()) - .eq(UserFile::getDeleteFlag, 0); - userFileMapper.update(null, userFileLambdaUpdateWrapper1); + //标记删除标志 + LambdaUpdateWrapper userFileLambdaUpdateWrapper1 = new LambdaUpdateWrapper<>(); + userFileLambdaUpdateWrapper1.set(UserFile::getDeleteFlag, RandomUtil.randomInt(FileConstant.deleteFileRandomSize)) + .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) + .set(UserFile::getDeleteBatchNum, deleteBatchNum) + .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()) + .eq(UserFile::getDeleteFlag, 0); + userFileMapper.update(null, userFileLambdaUpdateWrapper1); } }); diff --git a/src/main/java/com/qiwenshare/file/service/UserService.java b/src/main/java/com/qiwenshare/file/service/UserService.java index 830e215..3702052 100644 --- a/src/main/java/com/qiwenshare/file/service/UserService.java +++ b/src/main/java/com/qiwenshare/file/service/UserService.java @@ -1,10 +1,11 @@ package com.qiwenshare.file.service; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.DateUtil; +import com.qiwenshare.common.util.HashUtils; import com.qiwenshare.common.util.PasswordUtil; import com.qiwenshare.common.util.security.JwtUser; import com.qiwenshare.file.api.IUserService; @@ -17,7 +18,6 @@ import com.qiwenshare.file.mapper.UserMapper; import io.jsonwebtoken.Claims; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.crypto.hash.SimpleHash; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -91,7 +91,7 @@ public class UserService extends ServiceImpl implements IU String salt = PasswordUtil.getSaltValue(); - String newPassword = new SimpleHash("MD5", userBean.getPassword(), salt, 1024).toHex(); + String newPassword = HashUtils.hashHex("MD5", userBean.getPassword(), salt, 1024); userBean.setSalt(salt); diff --git a/src/main/java/com/qiwenshare/file/util/FileModel.java b/src/main/java/com/qiwenshare/file/util/FileModel.java index 80b80d9..5f297b5 100644 --- a/src/main/java/com/qiwenshare/file/util/FileModel.java +++ b/src/main/java/com/qiwenshare/file/util/FileModel.java @@ -18,17 +18,15 @@ package com.qiwenshare.file.util; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.qiwenshare.file.helper.DocumentManager; import com.qiwenshare.file.helper.FileUtility; -import com.qiwenshare.file.helper.ServiceConverter; import lombok.Data; import java.io.File; import java.io.FileInputStream; +import java.nio.charset.StandardCharsets; import java.util.*; @Data @@ -41,7 +39,7 @@ public class FileModel public EditorConfig editorConfig; public String token; - public FileModel(String fileName, String fileUrl, String fileModifyTime, String uid, String uname, String mode) + public FileModel(String userFileId, String fileName, String fileUrl, String fileModifyTime, String uid, String uname, String callbackUrl, String mode) { if (fileName == null) fileName = ""; fileName = fileName.trim(); @@ -53,12 +51,12 @@ public class FileModel document.url = fileUrl; // document.urlUser = DocumentManager.GetFileUri(fileName, false); document.fileType = FileUtility.GetFileExtension(fileName).replace(".", ""); - document.key = ServiceConverter.GenerateRevisionId(DocumentManager.CurUserHostAddress(null) + "/" + fileName + "/" + fileModifyTime); + document.key = Base64.getEncoder().encodeToString((userFileId + "_" + fileModifyTime).getBytes(StandardCharsets.UTF_8)); document.info = new Info(); document.info.favorite = uid != null && !uid.isEmpty() ? uid.equals("uid-2") : null; editorConfig = new EditorConfig(null); -// editorConfig.callbackUrl = DocumentManager.GetCallback(fileName); + editorConfig.callbackUrl = callbackUrl; // editorConfig.lang = null; if (uid != null) editorConfig.user.id = uid; @@ -90,90 +88,90 @@ public class FileModel editorConfig.InitDesktop(document.urlUser); } - public void BuildToken() - { - Map map = new HashMap<>(); - map.put("type", type); - map.put("documentType", documentType); - map.put("document", document); - map.put("editorConfig", editorConfig); +// public void BuildToken() +// { +// Map map = new HashMap<>(); +// map.put("type", type); +// map.put("documentType", documentType); +// map.put("document", document); +// map.put("editorConfig", editorConfig); +// +// token = jwtComp.createJWT(map); +// } - token = DocumentManager.CreateToken(map); - } - - public String[] GetHistory() - { - String histDir = DocumentManager.HistoryDir(DocumentManager.StoragePath(document.title, null)); - if (DocumentManager.GetFileVersion(histDir) > 0) { - Integer curVer = DocumentManager.GetFileVersion(histDir); - - List hist = new ArrayList<>(); - Map histData = new HashMap(); - - for (Integer i = 1; i <= curVer; i++) { - Map obj = new HashMap(); - Map dataObj = new HashMap(); - String verDir = DocumentManager.VersionDir(histDir, i); - - try { - String key = null; - - key = i == curVer ? document.key : readFileToEnd(new File(verDir + File.separator + "key.txt")); - - obj.put("key", key); - obj.put("version", i); - - if (i == 1) { - String createdInfo = readFileToEnd(new File(histDir + File.separator + "createdInfo.json")); - JSONObject json = JSONObject.parseObject(createdInfo); - obj.put("created", json.get("created")); - Map user = new HashMap(); - user.put("id", json.get("id")); - user.put("name", json.get("name")); - obj.put("user", user); - } - - dataObj.put("key", key); - dataObj.put("url", i == curVer ? document.url : DocumentManager.GetPathUri(verDir + File.separator + "prev" + FileUtility.GetFileExtension(document.title))); - dataObj.put("version", i); - - if (i > 1) { - JSONObject changes = JSONObject.parseObject(readFileToEnd(new File(DocumentManager.VersionDir(histDir, i - 1) + File.separator + "changes.json"))); - JSONObject change = (JSONObject) ((JSONArray) changes.get("changes")).get(0); - - obj.put("changes", changes.get("changes")); - obj.put("serverVersion", changes.get("serverVersion")); - obj.put("created", change.get("created")); - obj.put("user", change.get("user")); - - Map prev = (Map) histData.get(Integer.toString(i - 2)); - Map prevInfo = new HashMap(); - prevInfo.put("key", prev.get("key")); - prevInfo.put("url", prev.get("url")); - dataObj.put("previous", prevInfo); - dataObj.put("changesUrl", DocumentManager.GetPathUri(DocumentManager.VersionDir(histDir, i - 1) + File.separator + "diff.zip")); - } - - if (DocumentManager.TokenEnabled()) - { - dataObj.put("token", DocumentManager.CreateToken(dataObj)); - } - - hist.add(obj); - histData.put(Integer.toString(i - 1), dataObj); - - } catch (Exception ex) { } - } - - Map histObj = new HashMap(); - histObj.put("currentVersion", curVer); - histObj.put("history", hist); - - Gson gson = new Gson(); - return new String[] { gson.toJson(histObj), gson.toJson(histData) }; - } - return new String[] { "", "" }; - } +// public String[] GetHistory() +// { +// String histDir = DocumentManager.HistoryDir(DocumentManager.StoragePath(document.title, null)); +// if (DocumentManager.GetFileVersion(histDir) > 0) { +// Integer curVer = DocumentManager.GetFileVersion(histDir); +// +// List hist = new ArrayList<>(); +// Map histData = new HashMap(); +// +// for (Integer i = 1; i <= curVer; i++) { +// Map obj = new HashMap(); +// Map dataObj = new HashMap(); +// String verDir = DocumentManager.VersionDir(histDir, i); +// +// try { +// String key = null; +// +// key = i == curVer ? document.key : readFileToEnd(new File(verDir + File.separator + "key.txt")); +// +// obj.put("key", key); +// obj.put("version", i); +// +// if (i == 1) { +// String createdInfo = readFileToEnd(new File(histDir + File.separator + "createdInfo.json")); +// JSONObject json = JSONObject.parseObject(createdInfo); +// obj.put("created", json.get("created")); +// Map user = new HashMap(); +// user.put("id", json.get("id")); +// user.put("name", json.get("name")); +// obj.put("user", user); +// } +// +// dataObj.put("key", key); +// dataObj.put("url", i == curVer ? document.url : DocumentManager.GetPathUri(verDir + File.separator + "prev" + FileUtility.GetFileExtension(document.title))); +// dataObj.put("version", i); +// +// if (i > 1) { +// JSONObject changes = JSONObject.parseObject(readFileToEnd(new File(DocumentManager.VersionDir(histDir, i - 1) + File.separator + "changes.json"))); +// JSONObject change = (JSONObject) ((JSONArray) changes.get("changes")).get(0); +// +// obj.put("changes", changes.get("changes")); +// obj.put("serverVersion", changes.get("serverVersion")); +// obj.put("created", change.get("created")); +// obj.put("user", change.get("user")); +// +// Map prev = (Map) histData.get(Integer.toString(i - 2)); +// Map prevInfo = new HashMap(); +// prevInfo.put("key", prev.get("key")); +// prevInfo.put("url", prev.get("url")); +// dataObj.put("previous", prevInfo); +// dataObj.put("changesUrl", DocumentManager.GetPathUri(DocumentManager.VersionDir(histDir, i - 1) + File.separator + "diff.zip")); +// } +// +// if (DocumentManager.TokenEnabled()) +// { +// dataObj.put("token", jwtComp.createJWT(dataObj)); +// } +// +// hist.add(obj); +// histData.put(Integer.toString(i - 1), dataObj); +// +// } catch (Exception ex) { } +// } +// +// Map histObj = new HashMap(); +// histObj.put("currentVersion", curVer); +// histObj.put("history", hist); +// +// Gson gson = new Gson(); +// return new String[] { gson.toJson(histObj), gson.toJson(histData) }; +// } +// return new String[] { "", "" }; +// } private String readFileToEnd(File file) { String output = ""; diff --git a/src/main/java/com/qiwenshare/file/util/HttpsUtils.java b/src/main/java/com/qiwenshare/file/util/HttpsUtils.java deleted file mode 100644 index c10ca1c..0000000 --- a/src/main/java/com/qiwenshare/file/util/HttpsUtils.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.qiwenshare.file.util; - - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.HttpClient; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.conn.ssl.TrustStrategy; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.ssl.SSLContextBuilder; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.security.GeneralSecurityException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -public class HttpsUtils { - private static final int MAX_TIMEOUT = 7000; - private static final Logger logger = LoggerFactory.getLogger(HttpsUtils.class); - private static PoolingHttpClientConnectionManager connMgr; - private static RequestConfig requestConfig; - - static { - // 设置连接池 - connMgr = new PoolingHttpClientConnectionManager(); - // 设置连接池大小 - connMgr.setMaxTotal(100); - connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal()); - // Validate connections after 1 sec of inactivity - connMgr.setValidateAfterInactivity(1000); - RequestConfig.Builder configBuilder = RequestConfig.custom(); - // 设置连接超时 - configBuilder.setConnectTimeout(MAX_TIMEOUT); - // 设置读取超时 - configBuilder.setSocketTimeout(MAX_TIMEOUT); - // 设置从连接池获取连接实例的超时 - configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT); - - requestConfig = configBuilder.build(); - } - - /** - * 发送 GET 请求(HTTP),不带输入数据 - * - * @param url url - * @return 返回 - */ - public static InputStream doGet(String url) { - HttpEntity httpEntity = doGetHttpEntity(url, new HashMap()); - InputStream inputStream = null; - try { - inputStream = httpEntity.getContent(); - } catch (IOException e) { - logger.error(e.getMessage()); - } - - return inputStream; - } - - public static String doGetString(String url, Map params) { - HttpEntity httpEntity = doGetHttpEntity(url, params); - String result = null; - try { - result = EntityUtils.toString(httpEntity, "UTF-8"); - } catch (IOException e) { - logger.error(e.getMessage()); - } - return result; - } - - public static String doGetString(String url) { - HttpEntity httpEntity = doGetHttpEntity(url, new HashMap()); - String result = null; - try { - result = EntityUtils.toString(httpEntity, "UTF-8"); - } catch (IOException e) { - logger.error(e.getMessage()); - } - return result; - } - - /** - * 发送 GET 请求(HTTP),K-V形式 - * - * @param url url - * @param params 参数 - * @return 返回 - */ - public static HttpEntity doGetHttpEntity(String url, Map params) { - String apiUrl = url; - StringBuffer param = new StringBuffer(); - int i = 0; - for (String key : params.keySet()) { - if (i == 0) - param.append("?"); - else - param.append("&"); - param.append(key).append("=").append(params.get(key)); - i++; - } - apiUrl += param; - String result = null; - HttpClient httpClient = null; - if (apiUrl.startsWith("https")) { - httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) - .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); - } else { - httpClient = HttpClients.createDefault(); - } - InputStream instream = null; - HttpEntity httpEntity = null; - try { - HttpGet httpGet = new HttpGet(apiUrl); - httpGet.setHeader("Referer", "https://y.qq.com/"); - HttpResponse response = httpClient.execute(httpGet); - httpEntity = response.getEntity(); - } catch (IOException e) { - logger.error(e.getMessage()); - } - return httpEntity; - } - - /** - * 发送 POST 请求(HTTP),不带输入数据 - * - * @param apiUrl url - * @return 返回 - */ - public static String doPost(String apiUrl) { - return doPost(apiUrl, new HashMap()); - } - - /** - * 发送 POST 请求,K-V形式 - * - * @param apiUrl API接口URL - * @param params 参数map - * @return 返回 - */ - public static String doPost(String apiUrl, Map params) { - CloseableHttpClient httpClient = null; - if (apiUrl.startsWith("https")) { - httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) - .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); - } else { - httpClient = HttpClients.createDefault(); - } - String httpStr = null; - HttpPost httpPost = new HttpPost(apiUrl); - CloseableHttpResponse response = null; - - try { - httpPost.setConfig(requestConfig); - List pairList = new ArrayList<>(params.size()); - for (Map.Entry entry : params.entrySet()) { - NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString()); - pairList.add(pair); - } - httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8"))); - response = httpClient.execute(httpPost); - HttpEntity entity = response.getEntity(); - httpStr = EntityUtils.toString(entity, "UTF-8"); - } catch (IOException e) { - logger.error(e.getMessage()); - } finally { - if (response != null) { - try { - EntityUtils.consume(response.getEntity()); - } catch (IOException e) { - logger.error(e.getMessage()); - } - } - } - return httpStr; - } - - /** - * 发送 POST 请求,JSON形式 - * - * @param apiUrl url - * @param json json对象 - * @return 返回 - */ - public static String doPost(String apiUrl, Object json) { - CloseableHttpClient httpClient = null; - if (apiUrl.startsWith("https")) { - httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) - .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); - } else { - httpClient = HttpClients.createDefault(); - } - String httpStr = null; - HttpPost httpPost = new HttpPost(apiUrl); - CloseableHttpResponse response = null; - - try { - httpPost.setConfig(requestConfig); - StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");// 解决中文乱码问题 - stringEntity.setContentEncoding("UTF-8"); - stringEntity.setContentType("application/json"); - httpPost.setEntity(stringEntity); - response = httpClient.execute(httpPost); - HttpEntity entity = response.getEntity(); - httpStr = EntityUtils.toString(entity, "UTF-8"); - } catch (IOException e) { - logger.error(e.getMessage()); - } finally { - if (response != null) { - try { - EntityUtils.consume(response.getEntity()); - } catch (IOException e) { - logger.error(e.getMessage()); - } - } - } - return httpStr; - } - - /** - * 创建SSL安全连接 - * - * @return 返回 - */ - private static SSLConnectionSocketFactory createSSLConnSocketFactory() { - SSLConnectionSocketFactory sslsf = null; - try { - SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { - - public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { - return true; - } - }).build(); - sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() { - - @Override - public boolean verify(String arg0, SSLSession arg1) { - return true; - } - }); - } catch (GeneralSecurityException e) { - logger.error(e.getMessage()); - } - return sslsf; - } -} diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql index abbeb0e..7dcf575 100644 --- a/src/main/resources/import.sql +++ b/src/main/resources/import.sql @@ -152,9 +152,6 @@ INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExt INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (53, 2, 'css'); INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (54, 2, 'json'); -INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (53, 2, 'md'); -INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (54, 2, 'markdown'); - INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (55, 3, 'avi'); INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (56, 3, 'mp4'); @@ -173,4 +170,5 @@ INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExt INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (68, 4, 'aac'); INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (69, 4, 'flac'); - +INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (70, 2, 'md'); +INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (71, 2, 'markdown');