如何調用 STS
瀏覽器是不受信任的環境,如果把 AccessKeyId 和 AccessKeySecret 直接保存在瀏覽器端,存在極高的風險。建議在瀏覽器環境下使用 STS 模式進行 OSS 介面調用。
瀏覽器中使用 STS Server 相關文檔。
獲取 STS token 後,就可進行 SDK 初始化操作。
<script type="text/javascript">
$.ajax("http://your_sts_server/",{method: 'GET'},function (err, result) {
let client = new OSS({
accessKeyId: result.AccessKeyId,
accessKeySecret: result.AccessKeySecret,
stsToken: result.SecurityToken,
endpoint: '<oss endpoint>',
bucket: '<Your bucket name>'
});
});
</script>
如何 HTTPS 訪問
初始化 SDK 時,可傳入以下幾個參數:
- region: 參數是指您申請 OSS 服務時的區域,例如
oss-cn-hangzhou
。完整的區域列表可以在 OSS 服務節點查看。 - internal: 配合
region
使用,如果指定internal
為true
,則訪問內網節點。 - secure: 配合
region
使用,如果指定了secure
為true
,則使用 HTTPS 訪問。 - endpoint: 例如
http://oss-cn-hangzhou.aliyuncs.com
,如果指定了endpoint
,則region
會被忽略,endpoint
可以指定HTTPS,也可以是IP形式。
瀏覽器跨域問題如何解決
在瀏覽器中使用 SDK 前,先要設定 Bucket 的 CORS 屬性。具體步驟,請查看相關文檔。
如何設定上傳檔案的使用者自訂資料(meta),檔案類型(mime)和要求標頭(header)
參考瀏覽器分區上傳
關於瀏覽器端斷點續傳的說明
可以將checkpoint保存到瀏覽器的localstorage,下次再調用的時候傳入checkpoint參數,就可以實現斷點續傳功能。
如何獲取上傳進度
使用分區上傳時,可獲取上傳進度。相關文檔。
如何獲取下載進度
瀏覽器中無法獲取進度,可調用 signatureUrl
方法,獲取下載地址,可查看相關文檔。
如何上傳檔案到指定目錄
給要上傳的 object 名稱前加指定目錄首碼即可,可參考: OSS 和檔案系統對比。
let OSS = require('ali-oss')
let client = new OSS({
region: '<Your region>',
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: 'Your bucket name'
});
client.multipartUpload('base-dir/' +'object-key', 'local-file', {
progress: async function (p) {
console.log('Progress: ' + p);
}
});
console.log(result);
}).catch((err) => {
console.log(err);
});
如何上傳base64編碼的圖片
base64先轉碼成指定格式圖片,然後調用OSS上傳介面進行上傳,具體可參考Github樣本。
/**
* base64 to file
* @param dataurl base64 content
* @param filename set up a meaningful suffix, or you can set mime type in options
* @returns {File|*}
*/
const dataURLtoFile = function dataURLtoFile(dataurl, filename) {
const arr = dataurl.split(',');
const mime = arr[0].match(/:(.*?);/)[1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });// if env support File, also can use this: return new File([u8arr], filename, { type: mime });
};
// client表示OSS client執行個體
const uploadBase64Img = function uploadBase64Img(client) {
// base64格式的內容
const base64Content = 'data:image:xxxxxxxxxxxxx';
const filename = 'img.png';
const imgfile = dataURLtoFile(base64Content, filename);
//key表示上傳的object key ,imgFile表示dataURLtoFile處理後返回的圖片
client.multipartUpload(key, imgfile).then((res) => {
console.log('upload success: %j', res);
}).catch((err) => {
console.error(err);
});
};
如何限制上傳檔案的大小
在瀏覽器中可以根據document.getElementById(“file”).files[0].size 獲取上傳檔案的大小(位元組數),可參考web直傳的post請求。
如何獲取object的簽名URL
可調用 signatureUrl
方法,獲取下載地址,可查看相關文檔。
如何使用sdk生成的簽名URL並進行資源上傳
簽名URL常用於授權給第三方進行資源的下載和上傳操作。下載請參見上一條。sdk中提供signatureUrl API,用於返回一個經過簽名的url,使用者直接使用這個url上傳或者下載資源即可。利用簽名URL上傳資源請參考sdk工程樣本:簽名url上傳資源樣本
如何使用表單上傳方式上傳資源到OSS伺服器
可參考 Web 端直傳實踐。