有赞 OSS node 客户端
有赞 OSS 下的 Node 客户端,提供 put、putStream、get、getStream、head、delete 方法
使用姿势
安装依赖
yarn add @youzan/youzan-oss -S
Node 里使用
在 3.x 版本中,导出方式已订正为 ESM 标准导出,使用 CommonJS 的同学注意
上传文件到 OSS
CJS
const OSS = require('@youzan/youzan-oss').default;
const client = new OSS({
namespace: 'xxxx',
env: 'prod',
});
client.put('key', 'xxxxx')
.then(url => {
console.log('put done. The resource url is %s', url);
})
.catch((err) => {
console.log(err);
})
ESM
import OSS from '@youzan/youzan-oss'
const client = new OSS({
namespace: 'xxxx',
env: 'prod'
})
const url = await client.put('key', 'xxxxx')
从 OSS 上获取文件
const OSS = require('@youzan/youzan-oss').default;
const client = new OSS({
namespace: 'xxxx'
});
client.get('key', 'xxxxx')
.then(() => {
console.log('get done');
})
.catch((err) => {
console.log(err);
})
API 介绍
OSS 实例化
目前实例化时值需要传入 namespace
即可,namespace
需要找运维申请
使用方法:
const client = new OSS({
namespace: 'xxxx'
});
参数:
参数 | 类型 | 描述 | 是否必传 | 默认值 | 备注 |
---|
namespace | string | 命名空间 | 是 | 无 | 需要申请 |
env | string | 环境 | 否 | NODE_ENV | |
host | string | 请求的 host 域名 | 否 | src/constants/index | 不传时会根据环境获取 |
put 方法
put 方法用来将本地文件上传到 OSS
使用方法:
client.put('object-key', file)
.then(url => {
console.log('put done. The resource url is %s', url);
})
.catch((err) => {
console.log(err);
})
参数
stream 流式上传
putStream 方法用来将本地大文件上传到 OSS,可监听进度
(适合大文件)
使用方法:
const stream = client.putStream('object-key', file);
let total = 0;
let count = 0;
stream.on('progress', (contentLength, totalLength) => {
total += contentLength;
count += 1;
console.log(total + '------' + count);
});
stream.on('finish', url => {
console.log('put done. The resource url is %s', url);
console.log('finish', total + '------' + count)
});
stream.on('error', (err) => console.log(err));
参数
get 方法
get 方法用来获取 OSS 上的文件
使用方法1 - 存储到文件里
client.get('object-key', file)
.then(() => {
console.log('done');
})
.catch((err) => {
console.log(err);
})
使用方法2 - 存储到内存中
client.get('object-key')
.then((buf) => {
console.log(buf');
})
.catch((err) => {
console.log(err);
})
参数
stream 流式获取方法
getStream 通过流的形式获取 OSS 文件,可获取下载进度。常用来获取大文件
使用方法
const stream = client.getStream('object-key', file);
let total = 0;
stream.on('progress', (contentLength, totalLength) => {
total += contentLength;
console.log('获取进度为:' + total / totalLength);
});
stream.on('finish', () => console.log('获取完毕'));
stream.on('error', (err) => console.log('获取出错' + err));
参数
getStream
入参和上面 get
相同。返回的实例可监听 on、finish、error
。
head 方法
head 方法用来获取 OSS 上的文件信息
使用方法:
client.head('object-key')
.then((info) => {
console.log(info);
})
.catch((err) => {
console.log(err);
})
参数
参数 | 类型 | 描述 | 是否必传 | 默认值 | 备注 |
---|
key | string | 文件对应的 key | 是 | 无 | 每个上传的文件对应的 key |
delete 方法
delete 会删除 OSS 上的文件
使用方法:
client.delete('object-key')
.then(() => {
console.log('delete done');
})
.catch((err) => {
console.log(err);
})
参数
参数 | 类型 | 描述 | 是否必传 | 默认值 | 备注 |
---|
key | string | 文件对应的 key | 是 | 无 | 每个上传的文件对应的 key |
错误信息
code | message | 备注 |
---|
FILE_OUT_OF_SIZE | 文件超过限制 | 默认限制 1 G |
UNKNOWN_HOST | 当前 host 不是标准的环境变量 | host 必须是 qa pre prod test officeProd 中的一个 |