一.介紹
本文主要介紹如何基于POST Policy的使用規(guī)則在客戶端通過JAVAScript代碼完成簽名,然后通過表單直傳數(shù)據(jù)到OSS。
二.客戶端簽名步驟
1.在客戶端通過JavaScript代碼完成簽名,無需過多配置,即可實現(xiàn)直傳,非常方便。但是客戶端通過JavaScript把AccesssKeyID和AccessKeySecret寫在代碼里面有泄露的風(fēng)險,建議采用服務(wù)端簽名后直傳。
2.OSS為Bucket設(shè)置跨域規(guī)則以支持Post方法,
首先要OSS管理控制臺設(shè)置CORS
3.如果上傳后保持原來的文件名,字段改成‘key’:'${filename}'
修改前
new_multipart_params = {
'key' : g_object_name,
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //讓服務(wù)端返回200,不然,默認(rèn)會返回204
'signature': signature,
};
修改后
new_multipart_params = {
'key' : 'abc/' + '${filename}',
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200',
//讓服務(wù)端返回200,不然,默認(rèn)會返回204
'signature': signature,
};
4.如果目錄是后端返回的目錄地址,需要和以下key拼接拼接
let new_multipart_params = {
'key' : res.data.extend.ossMsg.objectName +'.' + fileSuffix,
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //讓服務(wù)端返回200,不然,默認(rèn)會返回204
'signature': signature,
};
5.如果想在上傳的時候設(shè)置成隨機(jī)文件名,后綴保持和客戶端文件一樣,可以改為
function check_object_radio() {
g_object_name_type = 'local_name';
}
6.可以將文件上傳到指定目錄下。下面的代碼是將上傳目錄改成abc/,注意,目錄必須以正斜線(/)結(jié)尾
function get_dirname()
{
g_dirname = 'abc/'
}
7.上傳簽名主要是對policyText進(jìn)行簽名,最簡單的例子如下
var policyText = {
"expiration": "2023-01-01T12:00:00.000Z", //設(shè)置該P(yáng)olicy的失效時間,超過這個失效時間之后,就沒有辦法通過這個policy上傳文件了
"conditions": [
["content-length-range", 0, 1048576000] // 設(shè)置上傳文件的大小限制
]
};