阿里云配置
进入阿里云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。