Tencent Cloud COS platform adapter for moon-file-storage
Dependencies
async test "能力位里 acl 是真的;预签名是本地算出来的,一条请求都不发" {
let transport : &@transport.Transport = @transport.AsyncHttpTransport::new()
let client = @cossdk.Client::new(
@cosconfig.Config::new(
"ap-guangzhou",
@cosauth.Credentials::new("ak", "sk"),
),
transport,
)
let domain = "https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com"
let platform = @cos.CosPlatform::new(@cos.CosPlatformConfig::{
platform: "cos",
bucket: "examplebucket-1250000000",
domain: Some(domain),
client,
})
let caps = platform.capabilities()
assert_true(caps.multipart_upload)
assert_true(caps.presigned_url)
assert_true(caps.metadata)
// 与阿里云那一格正相反:写 `public-read` 被收下、匿名 GET 真取回字节,这是真桶读数
assert_true(caps.acl)
let intent = @model.FileInfo::draft("cos", "", "note", "txt")
let info = intent.stamped(@model.Stamp::{
platform: None,
path: Some("2026/10/note.txt"),
url: Some(domain + "/2026/10/note.txt"),
size: None,
create_time: None,
upload_id: None,
upload_status: None,
user_metadata: None,
})
let url = platform.presigned_url(info, @model.PresignMethod::Get, 120) catch {
_ => fail("presigned_url raised on a storage that claims the family")
}
assert_true(url.has_prefix(domain))
assert_true(url.find("q-sign-algorithm=sha1") is Some(_))
assert_true(url.find("q-sign-time=") is Some(_))
assert_true(url.find("2026/10/note.txt") is Some(_))
}
///|
async test "没给 domain 就在发出请求之前拒;私有桶的地址不该被编成一条能打开的链接" {
let transport : &@transport.Transport = @transport.AsyncHttpTransport::new()
let client = @cossdk.Client::new(
@cosconfig.Config::new(
"ap-guangzhou",
@cosauth.Credentials::new("ak", "sk"),
),
transport,
)
let platform = @cos.CosPlatform::new(@cos.CosPlatformConfig::{
platform: "cos",
bucket: "examplebucket-1250000000",
domain: None,
client,
})
let refused = try {
let _ = platform.get_file("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/2026/10/note.txt")
"no-error"
} catch {
@model.StorageError::InvalidInput(reason) => "InvalidInput:" + reason
_ => "other"
}
assert_true(refused.has_prefix("InvalidInput:"))
}moon add mldong/moon-file-storage-cosInstall
Download zipTencent Cloud COS platform adapter for moon-file-storage
Dependencies