From dfab1ec324c4300d4617bbb7f131b9be6b444dd4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 30 Jul 2025 14:08:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=A4=B4=E5=83=8F1144555?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/caseData/extend/aliyun/Oss.java | 64 ++++++++++++++++++- .../example/caseData/service/UserService.java | 8 ++- 2 files changed, 66 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/caseData/extend/aliyun/Oss.java b/src/main/java/com/example/caseData/extend/aliyun/Oss.java index 3085487..c7c3c0c 100644 --- a/src/main/java/com/example/caseData/extend/aliyun/Oss.java +++ b/src/main/java/com/example/caseData/extend/aliyun/Oss.java @@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.time.Instant; @@ -39,18 +40,75 @@ public class Oss { } public static boolean putObject(String fileName, byte[] content) { + if (content == null || content.length == 0) { + logger.warn("Failed to upload object to OSS: content is null or empty, fileName={}", fileName); + return false; + } + + if (fileName == null || fileName.trim().isEmpty()) { + logger.warn("Failed to upload object to OSS: fileName is null or empty"); + return false; + } + OSS client = createClient(); - try (InputStream input = new ByteArrayInputStream(content)) { - client.putObject(ossConfig.getBucket(), fileName, input); + ByteArrayInputStream inputStream = new ByteArrayInputStream(content); + + try { + // 推断 Content-Type + String contentType = determineContentType(fileName); + + // 创建对象元数据 + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentLength(content.length); + metadata.setContentType(contentType); + + // 执行上传 + PutObjectRequest request = new PutObjectRequest(ossConfig.getBucket(), fileName, inputStream, metadata); + client.putObject(request); + + logger.info("Successfully uploaded object to OSS: bucket={}, fileName={}, size={} bytes", + ossConfig.getBucket(), fileName, content.length); return true; + } catch (Exception e) { - logger.info(e.getMessage()); + logger.error("Failed to upload object to OSS. fileName={}, error={}", fileName, e.getMessage(), e); return false; } finally { + try { + inputStream.close(); // 可以不关(ByteArrayInputStream 空操作),但建议写上 + } catch (IOException ignored) { } client.shutdown(); } } + private static String determineContentType(String fileName) { + if (fileName == null) return "application/octet-stream"; + + int lastDotIndex = fileName.lastIndexOf('.'); + if (lastDotIndex < 0) { + return "application/octet-stream"; + } + + String ext = fileName.substring(lastDotIndex + 1).toLowerCase(); + + return switch (ext) { + case "jpg", "jpeg" -> "image/jpeg"; + case "png" -> "image/png"; + case "gif" -> "image/gif"; + case "bmp" -> "image/bmp"; + case "webp" -> "image/webp"; + case "pdf" -> "application/pdf"; + case "txt" -> "text/plain"; + case "html", "htm" -> "text/html"; + case "xml" -> "application/xml"; + case "json" -> "application/json"; + case "mp4" -> "video/mp4"; + case "avi" -> "video/x-msvideo"; + case "mp3" -> "audio/mpeg"; + default -> "application/octet-stream"; + }; + } + public static String getObjectToString(String fileName) { OSS client = createClient(); try { diff --git a/src/main/java/com/example/caseData/service/UserService.java b/src/main/java/com/example/caseData/service/UserService.java index f9fb5a3..62faa04 100644 --- a/src/main/java/com/example/caseData/service/UserService.java +++ b/src/main/java/com/example/caseData/service/UserService.java @@ -390,10 +390,10 @@ public class UserService { String dateTimeStr = LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); int randomSuffix = new Random().nextInt(9000) + 1000; - String ossPath = "user/avatar/" + dateTimeStr + randomSuffix + ".png"; + String ossPath = "dev/static/images/" + dateTimeStr + randomSuffix + ".png"; // 3. 上传 OSS - boolean success = Oss.putObject("/" + ossPath, imageBytes); + boolean success = Oss.putObject(ossPath, imageBytes); if (!success) { throw new BusinessException("图片处理失败"); } @@ -402,7 +402,9 @@ public class UserService { } } catch (Exception e) { - throw new BusinessException(e.getMessage()); + // 头像处理失败 + System.out.println(e.getMessage()); + return ""; } finally { if (conn != null) { conn.disconnect();