阿里云配置
进入阿里云OSS Bucket 列表的某个 Bucket 仓库下,点击访问控制 RAM

创建用户

勾上 创建 AccessKey ID 和 AccessKey Secret

复制 AccessKey 信息 用文档保存

创建角色

选择云账号

复制 ARN 用文档保存,然后 新增权限

搜索 oss 选择 AliyunOSSFullAccess 策略后保存

返回 oss 的 Bucket 管理页面,设置读写权限

设置跨域,创建规则,可以填写局域网地址,用于测试

点击概览,复制 Bucket 外网访问地址上的 oss-cn-地域,用文档保存


nodeJS上传
node接收文件或选择文件直接上传
javascript
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,开启传输加速时必须为true
timeout: 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('文件名称', '文件路径')
官方参考
Browser.js浏览器上传
浏览器上传建议使用 STS 方式来进行API访问
1、后端生成临时访问密钥
安装依赖
bash
npm i ali-oss
后端 nodeJS 调用STS服务生成临时访问密钥
javascript
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、前端上传
安装依赖
bash
npm i ali-oss
前端请求后端,获取生成的临时密钥,然后使用临时密钥 访问/上传文件
javascript
const OSS = require('ali-oss')
import axios from 'axios'
let sts_token = null
const 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_token
sts_token = res.data
}
const { AccessKeyId, AccessKeySecret, SecurityToken } = sts_token
const oss_client = new OSS({
// endpoint: 'https://oss-accelerate.aliyuncs.com',
region: 'oss-cn-hongkong', // Bucket所在地域。以华东1(杭州)为例,填写为oss-cn-hangzhou
authorizationV4: true,
accessKeyId: AccessKeyId,
accessKeySecret: AccessKeySecret,
stsToken: SecurityToken,
bucket: 'Bucket名称',
secure: true,
timeout: 10 * 60 * 1000
})
resolve(oss_client)
} catch (error) {
sts_token = null
reject(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、官方参考
参数配置
javascript
配置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。