diff --git a/module-file/src/main/java/ink/wgink/module/file/controller/app/api/FileAppController.java b/module-file/src/main/java/ink/wgink/module/file/controller/app/api/FileAppController.java index 4e9c1ef6..e5f650c2 100644 --- a/module-file/src/main/java/ink/wgink/module/file/controller/app/api/FileAppController.java +++ b/module-file/src/main/java/ink/wgink/module/file/controller/app/api/FileAppController.java @@ -52,6 +52,18 @@ public class FileAppController extends DefaultBaseController { return asyncUploadSingle(token, file, UploadTypeEnum.FILE, params); } + @ApiOperation(value = "上传文件", notes = "上传文件接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "userId", paramType = "path"), + @ApiImplicitParam(name = "file", value = "文件name", paramType = "query") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("upload-file-release/{userId}") + public Callable> uploadFileByUserId(@PathVariable("userId") String userId, @RequestParam("file") MultipartFile file) { + Map params = requestParams(); + return asyncUploadSingleByUserId(userId, file, UploadTypeEnum.FILE, params); + } + @ApiOperation(value = "上传图片", notes = "上传图片接口") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", paramType = "header"), @@ -64,6 +76,18 @@ public class FileAppController extends DefaultBaseController { return asyncUploadSingle(token, image, UploadTypeEnum.IMAGE, params); } + @ApiOperation(value = "上传图片", notes = "上传图片接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "userId", paramType = "path"), + @ApiImplicitParam(name = "image", value = "文件name", paramType = "query") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("upload-image-release/{userId}") + public Callable> uploadImageByUserId(@PathVariable("userId") String userId, @RequestParam("image") MultipartFile image) { + Map params = requestParams(); + return asyncUploadSingleByUserId(userId, image, UploadTypeEnum.IMAGE, params); + } + @ApiOperation(value = "上传视频", notes = "上传视频接口") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", paramType = "header"), @@ -79,6 +103,21 @@ public class FileAppController extends DefaultBaseController { return asyncUploadSingle(token, video, UploadTypeEnum.VIDEO, params); } + @ApiOperation(value = "上传视频", notes = "上传视频接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "userId", paramType = "path"), + @ApiImplicitParam(name = "video", value = "文件video", paramType = "query") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("upload-video-release/{userId}") + public Callable> uploadVideoByUserId(@PathVariable("userId") String userId, @RequestParam("video") MultipartFile video) { + if (fileProperties.getMediaMaxDuration() != null && fileProperties.getMediaMaxDuration().getApp() != null) { + fileService.checkVideoDurationAllow(video, fileProperties.getMediaMaxDuration().getApp().getVideo()); + } + Map params = requestParams(); + return asyncUploadSingleByUserId(userId, video, UploadTypeEnum.VIDEO, params); + } + @ApiOperation(value = "上传音频", notes = "上传音频接口") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", paramType = "header"), @@ -94,6 +133,21 @@ public class FileAppController extends DefaultBaseController { return asyncUploadSingle(token, audio, UploadTypeEnum.AUDIO, params); } + @ApiOperation(value = "上传音频", notes = "上传音频接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "userId", paramType = "path"), + @ApiImplicitParam(name = "audio", value = "文件audio", paramType = "query") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("upload-audio-release/{userId}") + public Callable> uploadAudioByUserId(@PathVariable("userId") String userId, @RequestParam("audio") MultipartFile audio) { + if (fileProperties.getMediaMaxDuration() != null && fileProperties.getMediaMaxDuration().getApp() != null) { + fileService.checkAudioDurationAllow(audio, fileProperties.getMediaMaxDuration().getApp().getAudio()); + } + Map params = requestParams(); + return asyncUploadSingleByUserId(userId, audio, UploadTypeEnum.AUDIO, params); + } + @ApiOperation(value = "上传图片", notes = "上传图片接口") @ApiImplicitParams({ @ApiImplicitParam(name = "image", value = "文件name", paramType = "query") @@ -111,6 +165,17 @@ public class FileAppController extends DefaultBaseController { }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("list") + public List list(@RequestHeader("token") String token, @RequestParam("ids") String ids) { + List idList = Arrays.asList(ids.split(",")); + return fileService.list(idList); + } + + @ApiOperation(value = "文件列表", notes = "文件列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "id列表,逗号分隔", paramType = "query") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-release") public List list(@RequestParam("ids") String ids) { List idList = Arrays.asList(ids.split(",")); return fileService.list(idList); @@ -127,4 +192,15 @@ public class FileAppController extends DefaultBaseController { return () -> new SuccessResultData<>(fileService.uploadSingle(token, uploadFile, uploadTypeEnum, params)); } + /** + * 上传文件 + * + * @param uploadFile + * @param params + * @return + */ + private Callable> asyncUploadSingleByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) { + return () -> new SuccessResultData<>(fileService.uploadSingleByUserId(userId, uploadFile, uploadTypeEnum, params)); + } + } diff --git a/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java b/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java index d0b34b7d..bcb17bd4 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/IDefaultFileService.java @@ -31,6 +31,16 @@ public interface IDefaultFileService { */ void uploadFile(String token, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) throws SystemException; + /** + * 文件上传 + * + * @param userId 用户ID + * @param uploadFile + * @param uploadTypeEnum + * @param params + */ + void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); + /** * 物理删除文件 * @@ -50,6 +60,19 @@ public interface IDefaultFileService { */ void saveUploadFileInfo(String token, String fileName, String uploadPath, String uploadFileName, String fileType, long fileSize, Map params); + /** + * 保存文件信息 + * + * @param userId + * @param fileName + * @param uploadPath + * @param uploadFileName + * @param fileType + * @param fileSize + * @param params + */ + void saveUploadFileInfoByUserId(String userId, String fileName, String uploadPath, String uploadFileName, String fileType, long fileSize, Map params); + /** * 获取上传文件路径 * @@ -81,4 +104,5 @@ public interface IDefaultFileService { * @param canRange */ void downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange); + } diff --git a/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java b/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java index 9315c4a5..108b75f3 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/IFileService.java @@ -152,6 +152,17 @@ public interface IFileService { */ String uploadSingle(String token, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); + /** + * 文件上传 + * + * @param userId + * @param uploadFile + * @param uploadTypeEnum + * @param params + * @return + */ + String uploadSingleByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); + /** * 文件上传 * diff --git a/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java b/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java index 77fab261..5d573848 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/IMinIoFileService.java @@ -34,7 +34,17 @@ public interface IMinIoFileService { * @param params */ void uploadFile(String token, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); - + + /** + * 文件上传 + * + * @param userId 用户ID + * @param uploadFile + * @param uploadTypeEnum + * @param params + */ + void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params); + /** * 下载文件 * diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java index d93d5cdf..cc9b4b00 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/DefaultFileServiceImpl.java @@ -67,6 +67,24 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau */ @Override public void uploadFile(String token, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) throws SystemException { + uploadFile(token, uploadFile, uploadTypeEnum, params, false); + } + + @Override + public void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) { + uploadFile(userId, uploadFile, uploadTypeEnum, params, true); + } + + /** + * 上传文件 + * + * @param tokenOrUserId + * @param uploadFile + * @param uploadTypeEnum + * @param params + * @param useUserId + */ + private void uploadFile(String tokenOrUserId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params, boolean useUserId) { String baseUploadPath = fileProperties.getUploadPath(); if (StringUtils.isBlank(baseUploadPath)) { throw new SystemException("上传路径未配置"); @@ -96,11 +114,19 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau params.clear(); FileInfoDTO fileInfoDTO = fileInfoDTOs.get(0); params.put("fileSummary", "REF:" + fileInfoDTO.getFileId()); - saveFile(token, params, fileInfoDTO.getFileName(), fileInfoDTO.getFilePath(), fileInfoDTO.getFileUrl(), fileInfoDTO.getFileType(), fileInfoDTO.getFileSize()); + if (useUserId) { + saveFileByUserId(tokenOrUserId, params, fileInfoDTO.getFileName(), fileInfoDTO.getFilePath(), fileInfoDTO.getFileUrl(), fileInfoDTO.getFileType(), fileInfoDTO.getFileSize()); + } else { + saveFile(tokenOrUserId, params, fileInfoDTO.getFileName(), fileInfoDTO.getFilePath(), fileInfoDTO.getFileUrl(), fileInfoDTO.getFileType(), fileInfoDTO.getFileSize()); + } return; } params.put("fileSummary", "MD5:" + fileMd5); - saveUploadFileInfo(token, fileName, uploadPath, uploadFileName, fileType, fileSize, params); + if (useUserId) { + saveUploadFileInfoByUserId(tokenOrUserId, fileName, uploadPath, uploadFileName, fileType, fileSize, params); + } else { + saveUploadFileInfo(tokenOrUserId, fileName, uploadPath, uploadFileName, fileType, fileSize, params); + } } @Override @@ -180,13 +206,7 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau * @param fileSize 文件大小 */ private void saveFile(String token, Map params, String fileName, String fileFullPath, String fileUrl, String fileType, long fileSize) { - params.put("fileId", UUIDUtil.getUUID()); - params.put("fileName", fileName); - params.put("filePath", fileFullPath); - params.put("fileUrl", fileUrl); - params.put("fileType", fileType); - params.put("fileSize", fileSize); - params.put("isBack", 0); + setFileParams(params, fileName, fileFullPath, fileUrl, fileType, fileSize); if (StringUtils.isBlank(token)) { setSaveInfo(params); } else { @@ -195,8 +215,44 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau fileDao.save(params); } + /** + * 保存文件 + * + * @param userId + * @param params + * @param fileName + * @param fileFullPath + * @param fileUrl + * @param fileType + * @param fileSize + */ + private void saveFileByUserId(String userId, Map params, String fileName, String fileFullPath, String fileUrl, String fileType, long fileSize) { + setFileParams(params, fileName, fileFullPath, fileUrl, fileType, fileSize); + setSaveInfoByUserId(params, userId); + fileDao.save(params); + } + + private void setFileParams(Map params, String fileName, String fileFullPath, String fileUrl, String fileType, long fileSize) { + params.put("fileId", UUIDUtil.getUUID()); + params.put("fileName", fileName); + params.put("filePath", fileFullPath); + params.put("fileUrl", fileUrl); + params.put("fileType", fileType); + params.put("fileSize", fileSize); + params.put("isBack", 0); + } + @Override public void saveUploadFileInfo(String token, String fileName, String uploadPath, String uploadFileName, String fileType, long fileSize, Map params) { + saveUploadFileInfo(token, fileName, uploadPath, uploadFileName, fileType, fileSize, params, false); + } + + @Override + public void saveUploadFileInfoByUserId(String userId, String fileName, String uploadPath, String uploadFileName, String fileType, long fileSize, Map params) { + saveUploadFileInfo(userId, fileName, uploadPath, uploadFileName, fileType, fileSize, params, true); + } + + private void saveUploadFileInfo(String tokenOrUserId, String fileName, String uploadPath, String uploadFileName, String fileType, long fileSize, Map params, boolean useUserId) { String fixPath = uploadPath.replace(fileProperties.getUploadPath(), ""); if ("\\".equals(File.separator)) { fixPath = fixPath.replace("\\", "/"); @@ -211,7 +267,11 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau File photo = new File(fileFullPath); fileSize = photo.length(); } - saveFile(token, params, fileName, fileFullPath, String.format("files/%s/%s", fixPath, uploadFileName), fileType, fileSize); + if (useUserId) { + saveFileByUserId(tokenOrUserId, params, fileName, fileFullPath, String.format("files/%s/%s", fixPath, uploadFileName), fileType, fileSize); + } else { + saveFile(tokenOrUserId, params, fileName, fileFullPath, String.format("files/%s/%s", fixPath, uploadFileName), fileType, fileSize); + } } @Override diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java index f86ae793..170ad777 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java @@ -122,6 +122,12 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService return params.get("fileId").toString(); } + @Override + public String uploadSingleByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) { + uploadFileByUserId(userId, uploadFile, uploadTypeEnum, params); + return params.get("fileId").toString(); + } + @Override public FileDTO uploadSingleForFileDTO(String token, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) throws SystemException { uploadFile(token, uploadFile, uploadTypeEnum, params); @@ -150,6 +156,23 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService } } + /** + * 上传文件 + * + * @param userId + * @param uploadFile + * @param uploadTypeEnum + * @param params + * @throws SystemException + */ + private void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) throws SystemException { + if (fileProperties.getUseMinIo()) { + minIoFileService.uploadFileByUserId(userId, uploadFile, uploadTypeEnum, params); + } else { + defaultFileService.uploadFileByUserId(userId, uploadFile, uploadTypeEnum, params); + } + } + @Override public void uploadErrorExcelFileInfo(String fileName, String uploadPath, long fileSize, Map params) { defaultFileService.saveUploadFileInfo(null, fileName, uploadPath, fileName, "xls", fileSize, params); diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java index f39994b4..5b58d12a 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java @@ -68,6 +68,24 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi @Override public void uploadFile(String token, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) { + uploadFile(token, uploadFile, uploadTypeEnum, params, false); + } + + @Override + public void uploadFileByUserId(String userId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params) { + uploadFile(userId, uploadFile, uploadTypeEnum, params, true); + } + + /** + * 上传文件 + * + * @param tokenOrUserId + * @param uploadFile + * @param uploadTypeEnum + * @param params + * @param useUserId 是否使用外来userId + */ + private void uploadFile(String tokenOrUserId, MultipartFile uploadFile, UploadTypeEnum uploadTypeEnum, Map params, boolean useUserId) { String fileId = UUIDUtil.getUUID(); params.put("fileId", fileId); @@ -80,7 +98,11 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi String bucketName = getBucketName(uploadTypeEnum); // 上传文件 upload(uploadFileName, fileSize, bucketName, uploadFile); - saveFile(token, fileId, fileName, fileType, fileSize, bucketName); + if (useUserId) { + saveFileByUserId(tokenOrUserId, fileId, fileName, fileType, fileSize, bucketName); + } else { + saveFile(tokenOrUserId, fileId, fileName, fileType, fileSize, bucketName); + } } @Override @@ -187,6 +209,32 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi * @param bucketName 桶名称 */ private void saveFile(String token, String fileId, String fileName, String fileType, long fileSize, String bucketName) { + Map params = getFileParams(fileId, fileName, fileType, fileSize, bucketName); + if (StringUtils.isBlank(token)) { + setSaveInfo(params); + } else { + setAppSaveInfo(token, params); + } + fileDao.save(params); + } + + /** + * 保存用户 + * + * @param userId 用户ID + * @param fileId + * @param fileName + * @param fileType + * @param fileSize + * @param bucketName + */ + private void saveFileByUserId(String userId, String fileId, String fileName, String fileType, long fileSize, String bucketName) { + Map params = getFileParams(fileId, fileName, fileType, fileSize, bucketName); + setSaveInfoByUserId(params, userId); + fileDao.save(params); + } + + private Map getFileParams(String fileId, String fileName, String fileType, long fileSize, String bucketName) { Map params = getHashMap(2); params.put("fileId", fileId); params.put("fileName", fileName); @@ -196,12 +244,7 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi params.put("fileSize", fileSize); params.put("fileSummary", "minio"); params.put("isBack", 1); - if (StringUtils.isBlank(token)) { - setSaveInfo(params); - } else { - setAppSaveInfo(token, params); - } - fileDao.save(params); + return params; } /**