阿里云配置
進入阿里云OSS Bucket 列表的某個 Bucket 倉庫下,點擊訪問控制 RAM
?創建用戶
勾上 創建 AccessKey ID 和 AccessKey Secret
復制 AccessKey 信息 用文檔保存
創建角色
選擇云賬號
復制?ARN 用文檔保存,然后 新增權限
搜索 oss 選擇?AliyunOSSFullAccess 策略后保存
返回 oss 的 Bucket 管理頁面,設置讀寫權限
設置跨域,創建規則,可以填寫局域網地址,用于測試
點擊概覽,復制?Bucket 外網訪問地址上的?oss-cn-地域,用文檔保存
nodeJS上傳
node接收文件或選擇文件直接上傳
const path = require('path')
const OSS = require('ali-oss')const client = new OSS({// 開啟 endpoint 時 region 無效;二選一,具體區別可以看官網文檔// region: 'oss-cn-shenzhen',endpoint: 'oss-cn-shenzhen.aliyuncs.com', // Endpoint(地域節點)外網訪問accessKeyId: '創建用戶時復制的 AccessKey ID',accessKeySecret: '創建用戶時復制的 AccessKey Secret',bucket: 'Bucket存儲空間名稱',// internal: true // 是否通過阿里云內部網絡接入OSS// cname: true // 默認為false,使用自定義域名訪問oss。如果為true,則可以用自定義域名填充端點字段// secure: true, // 是否返回HTTPS鏈接,默認false,開啟傳輸加速時必須為truetimeout: 10 * 60 * 1000 // 設置鏈接超時時間
})// 獲取oss文件列表
async function list() {// 不帶任何參數,默認最多返回100個文件。const result = await client.list()console.log(result)
}
list()// 上傳文件
const putOSS = (file_name, file_path) => {return new Promise(async (resolve, reject) => {try {if (!file_name || !file_path) throw 'file_name or file_path error'const result = await client.put(file_name, path.normalize(file_path))if (result.res.status !== 200) throw 'error'resolve(result.url)} catch (err) {reject(err)}})
}putOSS('文件名稱', '文件路徑')
官方參考?
安裝OSS Node.js SDK_對象存儲(OSS)-阿里云幫助中心
Browser.js瀏覽器上傳
瀏覽器上傳建議使用?STS 方式來進行API訪問
1、后端生成臨時訪問密鑰
安裝依賴
npm i ali-oss
后端 nodeJS 調用STS服務生成臨時訪問密鑰
const OSS = require('ali-oss')async function getSTSToken() {const sts = new OSS.STS({accessKeyId: '創建用戶時復制的 AccessKey ID',accessKeySecret: '創建用戶時復制的 AccessKey Secret'})const result = await sts.assumeRole('acs:ram::*****:role/test-oss-juese', // 創建角色時生成的 ARN'', // 自定義權限策略(可選)3600, // 憑證有效期,單位為秒'sessiontest' // 自定義會話名稱)console.log('AccessKeyId:', result.credentials.AccessKeyId)console.log('AccessKeySecret:', result.credentials.AccessKeySecret)console.log('SecurityToken:', result.credentials.SecurityToken)console.log('Expiration:', result.credentials.Expiration)return result.credentials // 生成的臨時密鑰
}const sts_token = getSTSToken()// 可以寫個node接口把 sts_token 傳給前端
?2、前端上傳
安裝依賴
npm i ali-oss
前端請求后端,獲取生成的臨時密鑰,然后使用臨時密鑰 訪問/上傳文件
const OSS = require('ali-oss')
import axios from 'axios'let sts_token = nullconst getOssClient = () => {return new Promise(async (resolve, reject) => {try {if (!sts_token || new Date(sts_token.Expiration) <= new Date()) {const res = await axios.get('get_sts_token') // 請求后端獲取sts_tokensts_token = res.data}const { AccessKeyId, AccessKeySecret, SecurityToken } = sts_tokenconst oss_client = new OSS({// endpoint: 'https://oss-accelerate.aliyuncs.com',region: 'oss-cn-hongkong', // Bucket所在地域。以華東1(杭州)為例,填寫為oss-cn-hangzhouauthorizationV4: true,accessKeyId: AccessKeyId,accessKeySecret: AccessKeySecret,stsToken: SecurityToken,bucket: 'Bucket名稱',secure: true,timeout: 10 * 60 * 1000})resolve(oss_client)} catch (error) {sts_token = nullreject(error)}})
}// 測試訪問文件列表
async function list() {try {const oss_client = await getOssClient()// 默認最多返回1000個文件。const result = await oss_client.list()console.log(result)} catch (e) {console.log(e)}
}
// list()async function uploadFile() {try {const ossClient = await getOssClient();const file = new File(['hello world'], 'test.txt'); // 假設是瀏覽器環境const filePath = 'uploads/test.txt'; // OSS 存儲路徑const result = await ossClient.put(filePath, file);console.log('Upload success:', result);} catch (error) {console.error('Upload failed:', error);}
}
// uploadFile()
?3、官方參考
安裝和使用OSS Browser.js SDK_對象存儲(OSS)-阿里云幫助中心
參數配置?
配置Client
您可以在初始化Client時按需添加配置項,例如通過timeout指定請求超時時間,通過stsToken指定臨時訪問憑證等。關于Browser.js支持的配置項以及配置示例,具體參數請參考下方說明。options參數說明:
accessKeyId {String}:在阿里云控制臺網站上創建的訪問密鑰。accessKeySecret {String}:在阿里云控制臺創建的訪問密鑰秘密。[stsToken] {String}:用于臨時授權。[refreshSTSToken] {Function}:當STS信息過期時自動設置stsToken、accessKeyId、accessKeySecret的函數。返回值必須是包含stsToken、accessKeyId、accessKeySecret的對象。[refreshSTSTokenInterval] {number}:STS令牌刷新間隔時間(毫秒)。應小于STS信息的過期間隔,默認為300000毫秒(5分鐘)。[bucket] {String}:您想訪問的默認Bucket。如果沒有Bucket,請先使用putBucket()創建一個。[endpoint] {String}:OSS區域域名。優先級高于region。根據需要設置為外網域名、內網域名或加速域名等,請參考終端節點列表。[region] {String}:Bucket數據所在的區域位置,默認為oss-cn-hangzhou。[internal] {Boolean}:是否通過阿里云內網訪問OSS,默認為false。如果您的服務器也在阿里云上運行,可以設置為true以節省大量費用。[secure] {Boolean}:指示OSS客戶端使用HTTPS(secure: true)還是HTTP(secure: false)協議。[timeout] {String|Number}:針對所有操作的實例級別超時時間,默認為60秒。[cname] {Boolean}:默認為false,使用自定義域名訪問OSS。如果為true,則可以在endpoint字段中填寫自定義域名。[isRequestPay] {Boolean}:默認為false,表示是否開啟Bucket的請求者支付功能,如果為true,會向OSS服務器發送頭部'x-oss-request-payer': 'requester'。[useFetch] {Boolean}:默認為false,僅在瀏覽器環境中生效。如果為true,意味著使用fetch模式上傳對象,否則使用XMLHttpRequest。[enableProxy] {Boolean}:啟用代理請求,默認為false。注意啟用代理請求時,請確保已安裝proxy-agent。[proxy] {String | Object}:代理URI或選項,默認為null。[retryMax] {Number}:當請求因網絡錯誤或超時出錯時自動重試發送請求的最大次數。不支持流式上傳(如put、putStream、append等),因為流只能被消費一次。[maxSockets] {Number}:每個主機允許的最大套接字數。默認為無限。[authorizationV4] {Boolean}:使用V4簽名。默認為false。