Skip to content

Latest commit

 

History

History
198 lines (150 loc) · 5.07 KB

File metadata and controls

198 lines (150 loc) · 5.07 KB

OSS问题诊断和解决指南

🎯 当前状态

根据阿里云OSS SDK README文档的逐步检查,我已经完成了以下修复和改进:

✅ 已完成的修复

1. 权限配置修复

  • ✅ 添加了WRITE_EXTERNAL_STORAGE权限到AndroidManifest.xml
  • ✅ 确认了INTERNET权限已存在

2. 配置优化

  • ✅ 更新STS_BASE_URL使用HTTPS:https://dev-inkcre-sts.zeabur.app/
  • ✅ 更新STS_ROLE为正确的角色名:oss_normal_op(根据API文档)

3. 数据模型修复

  • ✅ 创建了正确的STSResponse数据模型,匹配阿里云API文档格式:
data class STSResponse(
    val SecurityToken: String,
    val Expiration: String,
    val AccessKeySecret: String,
    val AccessKeyId: String
)

4. OSS上传服务优化

  • ✅ 使用了正确的阿里云OSS SDK API
  • ✅ 实现了标准的STS凭证初始化流程
  • ✅ 添加了上传进度回调
  • ✅ 优化了错误处理

5. STS服务改进

  • ✅ 添加了多路径尝试机制
  • ✅ 实现了模拟STS凭证作为临时解决方案
  • ✅ 增强了错误日志和调试信息

6. 诊断工具

  • ✅ 创建了OSSServiceDiagnostic全面诊断工具
  • ✅ 集成了长按诊断功能到相机界面

🔍 问题根因分析

通过测试发现,主要问题是:

STS服务不可用

# 测试结果显示
curl "https://dev-inkcre-sts.zeabur.app/"
# 返回: 500 Internal Server Error

curl "https://dev-inkcre-sts.zeabur.app/thrid_party/aliyun/sts/oss_normal_op?duration=3600"
# 返回: 404 Not Found

结论: STS服务本身存在问题,可能是:

  1. 服务未正确部署
  2. API路径配置错误
  3. 服务内部错误

🧪 测试和验证步骤

步骤1: 构建并安装应用

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk

步骤2: 运行诊断工具

  1. 打开应用
  2. 长按右下角的灰色按钮(toggleOverlayButton)
  3. 等待Toast提示"OSS诊断完成"
  4. 查看日志输出

步骤3: 查看诊断日志

adb logcat | grep -E "(OSSServiceDiagnostic|STSService|OSSUploadService)"

步骤4: 测试上传功能

  1. 拍摄照片
  2. 观察上传结果
  3. 查看相关日志

📋 诊断报告内容

诊断工具会检查:

  1. 配置检查

    • STS_BASE_URL
    • STS_ROLE
    • ENDPOINT
    • BUCKET_NAME
    • UPLOAD_FOLDER
  2. 网络连接测试

    • 基础网络连通性
  3. STS服务基础连接

    • STS服务器响应状态
  4. STS API路径测试

    • 多种可能的API路径
    • 响应状态和内容
  5. OSS Endpoint连通性

    • 阿里云OSS服务连接
  6. 问题分析和建议

    • 自动分析问题原因
    • 提供解决建议

🔧 临时解决方案

由于STS服务不可用,我实现了模拟STS凭证机制:

启用模拟模式

STSService.kt中:

companion object {
    private const val USE_MOCK_STS = true // 设置为true使用模拟凭证
}

模拟凭证内容

val mockResponse = STSResponse(
    SecurityToken = "mock_security_token_for_testing",
    Expiration = "2025-12-31T23:59:59Z", 
    AccessKeySecret = "mock_access_key_secret",
    AccessKeyId = "mock_access_key_id"
)

注意: 模拟凭证仅用于测试OSS上传流程,实际上传会失败,因为凭证无效。

🚀 下一步行动计划

立即执行

  1. 运行诊断工具 - 长按右下角按钮获取完整报告
  2. 检查STS服务 - 联系STS服务提供方确认服务状态
  3. 验证API路径 - 确认正确的API endpoint和路径

STS服务修复后

  1. 关闭模拟模式 - 设置USE_MOCK_STS = false
  2. 测试真实凭证 - 验证STS服务返回有效凭证
  3. 完整功能测试 - 测试端到端的上传流程

可能需要的配置调整

根据诊断结果,可能需要调整:

  1. API路径格式
// 可能的正确路径格式
"api/v1/thrid_party/aliyun/sts/${OSSConfig.STS_ROLE}?duration=3600"
"v1/thrid_party/aliyun/sts/${OSSConfig.STS_ROLE}?duration=3600"
  1. 角色名称
// 可能需要的角色名
const val STS_ROLE = "oss"           // 原始角色名
const val STS_ROLE = "oss_upload"    // 上传专用角色
const val STS_ROLE = "OSS"           // 大写格式
  1. 请求头配置
// 可能需要的请求头
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")

📞 获取帮助

如果问题仍然存在,请提供:

  1. 完整的诊断日志 - 运行诊断工具的输出
  2. STS服务状态 - 服务提供方的确认
  3. API文档 - 最新的STS API文档
  4. 错误截图 - 应用中的错误提示

🎯 成功标准

修复完成的标志:

  • ✅ 诊断工具显示所有检查通过
  • ✅ STS API返回有效凭证
  • ✅ 照片上传成功并返回URL
  • ✅ 应用中显示"上传成功"提示

当前状态: 代码已优化,等待STS服务修复后进行完整测试。

建议: 立即运行诊断工具获取详细报告,然后联系STS服务提供方解决服务问题。