文章

learn - OSS的临时凭证

服务端可以作为客户端来用,什么时候需要凭证了去内部服务中心申请拿一下即可。

learn - OSS的临时凭证

创作背景

服务拆分后,配置不想要分散开来,可以定一个配置中心服务,来给项目提供服务,纯微服务,弱配置化,可以任意部署,只要到中心拿到配置即可

目的

  • oss的另一种类似前后端都可用的方式进行使用配置。
  • 验证一致性(前后端使用同一个中心配置服务)。

实施

下发配置

本内容暂未提供。

使用配置(前端form提交上传)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>服务端生成签名上传文件到OSS</title>
</head>
<body>
<div class="container">
    <form>
        <div class="mb-3">
            <label for="file" class="form-label">选择文件:</label>
            <input type="file" class="form-control" id="file" name="file" required />
        </div>
        <button type="submit" class="btn btn-primary">上传</button>
    </form>
</div>

<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function () {
    const form = document.querySelector("form");
    const fileInput = document.querySelector("#file");

    var data = {"policy":"eyJjb...s0=","security_token":"xxx/XX/XSt/xx/aa.../...A==","x_oss_signature_version":"OSS4-HMAC-SHA256","x_oss_credential":"STS.xx110xxx/YYYYMMDD/cn-shanghai/oss/aliyun_v4_request","x_oss_date":"YYYYMMDDZ","signature":"cdc..cd","key_prefix":"objectName"}
  var host = "https://xiaoyu.aliyuncs.com"





    form.addEventListener("submit", (event) => {
        event.preventDefault();

        const file = fileInput.files[0];

        if (!file) {
            alert('请选择一个文件再上传。');
            return;
        }

        const filename = file.name;

        let formData = new FormData();
        formData.append("success_action_status", "200");
        formData.append("policy", data.policy);
        formData.append("x-oss-signature", data.signature);
        formData.append("x-oss-signature-version", data.x_oss_signature_version);
        formData.append("x-oss-credential", data.x_oss_credential);
        formData.append("x-oss-date", data.x_oss_date);
        formData.append("key", data.key_prefix + file.name); // 文件名
        formData.append("x-oss-security-token", data.security_token);
        formData.append("file", file); // file 必须为最后一个表单域

        return fetch(host, { 
            method: "POST",
            body: formData
        });
    });
});
</script>
</body>
</html>

后端golang(借助form方式,可以实现)

1

总结

  1. 可行。
本文由作者按照 CC BY 4.0 进行授权