| | |
| | | throw new UtilException("生成下载URL失败: " + e.getMessage(), e); |
| | | } |
| | | } |
| | | |
| | | public String getDownloadUrl(String bucketFileName, String bucketName) { |
| | | if (StringUtils.isNotBlank(bucketFileName)) { |
| | | try { |
| | | // 检查文件是否存在 |
| | | minioClient.statObject(StatObjectArgs.builder() |
| | | .bucket(bucketName) |
| | | .object(bucketFileName) |
| | | .build()); |
| | | |
| | | // 设置响应头 |
| | | Map<String, String> reqParams = new HashMap<>(); |
| | | // 提取原始文件名(如果存储时保留了原始名称) |
| | | String originalFileName = extractOriginalFileName(bucketFileName); |
| | | reqParams.put("response-content-disposition", |
| | | "attachment; filename=\"" + URLEncoder.encode(originalFileName, String.valueOf(StandardCharsets.UTF_8)) + "\""); |
| | | |
| | | // 构建预签名URL参数 |
| | | GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder() |
| | | .method(Method.GET) |
| | | .bucket(bucketName) |
| | | .object(bucketFileName) |
| | | .expiry(previewExpiry, TimeUnit.HOURS) |
| | | .extraQueryParams(reqParams) |
| | | .build(); |
| | | |
| | | return minioClient.getPresignedObjectUrl(args); |
| | | } catch (Exception e) { |
| | | throw new UtilException("MinioUtils:生成下载链接异常", e); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private String extractOriginalFileName(String bucketFileName) { |
| | | // 示例:如果存储格式为 "原始文件名_UUID" |
| | | int underscoreIndex = bucketFileName.lastIndexOf("_"); |
| | | if (underscoreIndex > 0) { |
| | | return bucketFileName.substring(0, underscoreIndex); |
| | | } |
| | | // 如果没有特殊格式,直接返回完整文件名 |
| | | return bucketFileName; |
| | | } |
| | | |
| | | } |