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 a1e3b98..6588e95 100644 --- a/src/main/java/com/qiwenshare/file/component/JwtComp.java +++ b/src/main/java/com/qiwenshare/file/component/JwtComp.java @@ -1,6 +1,6 @@ package com.qiwenshare.file.component; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.qiwenshare.common.util.math.CalculatorUtils; import com.qiwenshare.file.config.jwt.JwtProperties; import io.jsonwebtoken.Claims; @@ -8,7 +8,7 @@ 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; 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 6a6d58c..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; 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 30cd6c3..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,8 +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.commons.codec.digest.DigestUtils; -import org.apache.shiro.crypto.hash.SimpleHash; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -69,7 +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("手机号或密码错误!"); 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 ab32ef4..6c5255f 100644 --- a/src/main/java/com/qiwenshare/file/helper/DocumentManager.java +++ b/src/main/java/com/qiwenshare/file/helper/DocumentManager.java @@ -19,7 +19,7 @@ package com.qiwenshare.file.helper; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSONObject; import com.qiwenshare.file.component.JwtComp; import com.qiwenshare.file.service.OfficeConverterService; import org.springframework.stereotype.Component; @@ -231,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); } } diff --git a/src/main/java/com/qiwenshare/file/helper/TrackManager.java b/src/main/java/com/qiwenshare/file/helper/TrackManager.java index 35dab87..bad032d 100644 --- a/src/main/java/com/qiwenshare/file/helper/TrackManager.java +++ b/src/main/java/com/qiwenshare/file/helper/TrackManager.java @@ -18,9 +18,9 @@ package com.qiwenshare.file.helper; -import com.alibaba.fastjson.JSON; -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 com.qiwenshare.file.component.JwtComp; import com.qiwenshare.file.service.OfficeConverterService; 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/service/OfficeConverterService.java b/src/main/java/com/qiwenshare/file/service/OfficeConverterService.java index cebfb50..3986b39 100644 --- a/src/main/java/com/qiwenshare/file/service/OfficeConverterService.java +++ b/src/main/java/com/qiwenshare/file/service/OfficeConverterService.java @@ -18,7 +18,7 @@ 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; 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/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 c69636f..7dcf575 100644 --- a/src/main/resources/import.sql +++ b/src/main/resources/import.sql @@ -172,5 +172,3 @@ INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExt INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (70, 2, 'md'); INSERT INTO `fileclassification` (`fileClassificationId`, `fileTypeId`, `fileExtendName`) VALUES (71, 2, 'markdown'); - -