根据阿里云OSS PutObject最佳实践,我已经全面优化了OSS上传服务,提高了可靠性、性能和错误处理能力。
val conf = ClientConfiguration().apply {
connectionTimeout = 30 * 1000 // 连接超时30秒(增加)
socketTimeout = 30 * 1000 // socket超时30秒(增加)
maxConcurrentRequest = 3 // 移动端建议较少并发(优化)
maxErrorRetry = 3 // 增加重试次数(提高)
isCheckCRC64 = true // 启用CRC校验(新增)
}val metadata = ObjectMetadata().apply {
contentType = "image/jpeg"
cacheControl = "max-age=31536000" // 1年缓存
addUserMetadata("upload-source", "camera-app")
addUserMetadata("upload-time", timestamp)
}- ✅ 区分客户端异常(ClientException)和服务端异常(ServiceException)
- ✅ 详细记录错误码、RequestId等调试信息
- ✅ 提供更精确的错误提示
- ✅ 优化进度显示频率(每25%显示一次)
- ✅ 显示文件大小信息(KB单位)
- ✅ 避免日志过多影响性能
private fun buildImageUrl(objectKey: String): String {
return if (OSSConfig.ENDPOINT.contains(OSSConfig.BUCKET_NAME)) {
"${OSSConfig.ENDPOINT}/$objectKey"
} else {
val endpointDomain = OSSConfig.ENDPOINT.replace("https://", "")
"https://${OSSConfig.BUCKET_NAME}.$endpointDomain/$objectKey"
}
}- ✅ 新增
validateOSSConfiguration()方法 - ✅ 通过ListObjects API验证配置正确性
- ✅ 集成到诊断工具中
- ✅ 详细的调试日志
- ✅ 实时进度显示
- ✅ 错误信息展示
- ✅ 成功状态确认
} catch (e: com.alibaba.sdk.android.oss.ClientException) {
// 客户端异常(网络、参数等)
logManager.error("客户端异常: ${e.message}")
} catch (e: com.alibaba.sdk.android.oss.ServiceException) {
// 服务端异常(权限、配置等)
logManager.error("服务异常: ${e.errorCode} - ${e.message}")
logManager.error("RequestId: ${e.requestId}")
}- ✅ 确保InputStream正确关闭
- ✅ 客户端资源释放
- ✅ 内存泄漏防护
- ✅ 启用CRC64校验确保数据完整性
- ✅ 合理的超时设置
- ✅ 适当的重试机制
- ✅ 移动端优化的并发数
object OSSConfig {
const val STS_BASE_URL = "https://dev-inkcre-sts.zeabur.app/" // 修复路径
const val STS_ROLE = "oss_normal_op" // 正确角色名
const val ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com"
const val BUCKET_NAME = "dev-inkcre"
}- ✅ 新增OSS配置验证步骤
- ✅ 更详细的问题分析
- ✅ 优化建议提供
-
配置验证:
val ossService = OSSUploadService(context) val isValid = ossService.validateOSSConfiguration()
-
上传测试:
val imageUrl = ossService.uploadImage(imageUri)
-
诊断测试:
- 长按右下角按钮运行完整诊断
- 查看实时日志输出
- ✅ 网络异常处理
- ✅ 权限不足处理
- ✅ 配置错误处理
- ✅ 文件访问异常处理
- ✅ 上传进度实时显示
- ✅ 详细的状态信息
- ✅ 清晰的错误提示
- ✅ 成功确认信息
- ✅ 分级日志显示(DEBUG、INFO、WARN、ERROR、SUCCESS)
- ✅ 时间戳标记
- ✅ 自动滚动到最新
- ✅ 历史日志保留
- 配置检查:验证所有配置项
- 网络测试:检查网络连通性
- STS服务:测试凭证获取
- OSS连接:验证服务可用性
- 配置验证:确认权限和配置
- 问题分析:自动生成建议
- ✅ 详细的API调用日志
- ✅ 响应状态码和内容
- ✅ 错误码和RequestId
- ✅ 文件大小和进度信息
- ✅ 合理的超时设置(30秒)
- ✅ 适当的重试次数(3次)
- ✅ 移动端优化的并发数(3个)
- ✅ 启用CRC64校验
- ✅ 元数据设置
- ✅ 缓存控制优化
- ✅ 及时释放资源
- ✅ 避免内存泄漏
- ✅ 合理的缓冲区使用
- 构建应用:
./gradlew assembleDebug - 安装应用:安装到设备
- 运行诊断:长按右下角按钮
- 查看日志:关闭黑色叠层查看实时日志
- 测试上传:拍摄照片测试上传功能
如果需要调整配置,修改OSSConfig.kt中的相应参数。
- 查看实时日志了解详细状态
- 运行诊断工具获取完整报告
- 根据建议调整配置或联系服务提供方
- ✅ 更好的错误处理和恢复
- ✅ 数据完整性校验
- ✅ 网络异常容错
- ✅ 实时进度反馈
- ✅ 清晰的状态提示
- ✅ 详细的错误信息
- ✅ 完善的诊断工具
- ✅ 详细的调试日志
- ✅ 自动化问题分析
当前状态:OSS上传服务已按照阿里云PutObject最佳实践全面优化,构建成功,可以进行测试。
下一步:安装应用并测试优化后的上传功能,通过实时日志监控上传过程。