feat(ssa): Complete T-test end-to-end testing with 9 bug fixes - Phase 1 core 85% complete. R service: missing value auto-filter. Backend: error handling, variable matching, dynamic filename. Frontend: module activation, session isolation, error propagation. Full flow verified.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
56
docs/03-业务模块/SSA-智能统计分析/06-开发记录/oss_signer.R
Normal file
56
docs/03-业务模块/SSA-智能统计分析/06-开发记录/oss_signer.R
Normal file
@@ -0,0 +1,56 @@
|
||||
# utils/oss_signer.R
|
||||
# 阿里云 OSS 签名生成器 (R语言实现)
|
||||
# 参考文档: https://help.aliyun.com/document_detail/31951.html
|
||||
|
||||
library(digest)
|
||||
library(base64enc)
|
||||
|
||||
#' 生成 OSS API 签名头
|
||||
#' @param config 包含 access_key_id, access_key_secret, bucket 的列表
|
||||
#' @param verb HTTP 方法 (GET, PUT, etc.)
|
||||
#' @param resource OSS 资源路径 (例如 "/my-bucket/data/file.csv")
|
||||
#' @param content_type 内容类型 (可选)
|
||||
#' @param content_md5 内容 MD5 (可选)
|
||||
#' @return 包含 Authorization 和 Date 的命名向量
|
||||
generate_oss_signature <- function(config, verb, resource, content_type = "", content_md5 = "") {
|
||||
|
||||
# 1. 生成标准时间戳 (GMT 格式)
|
||||
# 例如: "Thu, 18 Feb 2026 08:00:00 GMT"
|
||||
date <- format(Sys.time(), "%a, %d %b %Y %H:%M:%S GMT", tz="GMT")
|
||||
|
||||
# 2. 构造 CanonicalizedResource
|
||||
# 格式: /BucketName/ObjectName
|
||||
canonicalized_resource <- paste0("/", config$bucket, "/", resource)
|
||||
|
||||
# 3. 构造 StringToSign
|
||||
# 格式:
|
||||
# VERB + "\n" +
|
||||
# Content-MD5 + "\n" +
|
||||
# Content-Type + "\n" +
|
||||
# Date + "\n" +
|
||||
# CanonicalizedOSSHeaders +
|
||||
# CanonicalizedResource
|
||||
|
||||
# 注意: 这里简化处理,未包含 CanonicalizedOSSHeaders (x-oss-*)
|
||||
string_to_sign <- paste(
|
||||
verb,
|
||||
content_md5,
|
||||
content_type,
|
||||
date,
|
||||
canonicalized_resource,
|
||||
sep = "\n"
|
||||
)
|
||||
|
||||
# 4. 计算 HMAC-SHA1 签名
|
||||
# 使用 AccessKeySecret 作为密钥
|
||||
signature <- base64encode(hmac(config$access_key_secret, string_to_sign, algo = "sha1", raw = TRUE))
|
||||
|
||||
# 5. 构造 Authorization 头
|
||||
auth_header <- paste0("OSS ", config$access_key_id, ":", signature)
|
||||
|
||||
# 返回需要的 Headers
|
||||
return(c(
|
||||
"Authorization" = auth_header,
|
||||
"Date" = date
|
||||
))
|
||||
}
|
||||
Reference in New Issue
Block a user