
Company News
Free Business Plan Upgrades for Open Source Maintainers
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.
@ismartify/oss
Advanced tools
轻量级的阿里云 OSS SDK,支持 V2 签名、自定义 Endpoint 和 Unstorage Driver。
npm install @ismartify/oss
import { OSSClient } from '@ismartify/oss';
const client = new OSSClient({
region: 'oss-cn-shenzhen',
accessKeyId: 'YOUR_ACCESS_KEY_ID',
accessKeySecret: 'YOUR_ACCESS_KEY_SECRET',
bucket: 'your-bucket',
headerEncoding: 'utf-8'
});
// 上传文件
await client.put('path/to/file.txt', 'Hello World');
// 下载文件
const result = await client.get('path/to/file.txt');
console.log(result.content.toString());
// 删除文件
await client.delete('path/to/file.txt');
// 列出文件
const list = await client.list({ prefix: 'path/', maxKeys: 10 });
console.log(list.objects);
const client = new OSSClient({
region: 'oss-cn-shenzhen',
accessKeyId: 'YOUR_ACCESS_KEY_ID',
accessKeySecret: 'YOUR_ACCESS_KEY_SECRET',
bucket: 'your-bucket',
endpoint: 'https://cdn.example.com' // 自定义域名
});
// 现在所有操作都会通过自定义域名访问
// 上传 JSON
await client.putJSON('data/config.json', {
theme: 'dark',
language: 'zh-CN'
});
// 下载 JSON
const data = await client.getJSON('data/config.json');
console.log(data.data); // { theme: 'dark', language: 'zh-CN' }
// GET 签名 URL(1小时有效期)
const url = await client.sign('path/to/file.txt');
// PUT 签名 URL(用于上传)
const uploadUrl = await client.sign('path/to/file.txt', {
method: 'PUT',
expires: 1800,
contentType: 'application/json'
});
// 带响应头控制的签名 URL
const downloadUrl = await client.sign('path/to/file.txt', {
expires: 3600,
response: {
'content-type': 'application/json',
'content-disposition': 'attachment; filename="download.json"'
}
});
与 Unstorage 无缝集成,将 OSS 作为存储后端。
import { createStorage } from 'unstorage';
import { OSSClient, createOSSDriver } from '@ismartify/oss';
const client = new OSSClient({
region: 'oss-cn-shenzhen',
accessKeyId: 'YOUR_ACCESS_KEY_ID',
accessKeySecret: 'YOUR_ACCESS_KEY_SECRET',
bucket: 'your-bucket'
});
const storage = createStorage({
driver: createOSSDriver(client)({
base: 'storage',
prefix: 'app'
})
});
// 使用 Unstorage API
await storage.setItem('user:123', { name: '张三', age: 30 });
const user = await storage.getItem('user:123');
await storage.removeItem('user:123');
const keys = await storage.getKeys();
new OSSClient(options: OSSClientOptions)
OSSClientOptions:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| region | string | 否 | OSS 区域,默认 'cn-hangzhou' |
| accessKeyId | string | 是 | 阿里云 AccessKey ID |
| accessKeySecret | string | 是 | 阿里云 AccessKey Secret |
| bucket | string | 是 | OSS Bucket 名称 |
| headerEncoding | string | 否 | 头部编码,默认 'utf-8' |
| timeout | number | 否 | 请求超时时间 |
| endpoint | string | 否 | 自定义 Endpoint |
上传对象到 OSS。
await client.put(objectName: string, data: string | Buffer, options?: {
contentType?: string;
contentMd5?: string;
meta?: Record<string, string>;
}): Promise<PutResult>
从 OSS 下载对象。
await client.get(objectName: string, options?: {
range?: string;
}): Promise<GetResult>
删除 OSS 对象。
await client.delete(objectName: string): Promise<DeleteResult>
获取对象元数据。
await client.head(objectName: string): Promise<HeadResult>
列出 OSS 对象。
await client.list(options?: {
prefix?: string;
maxKeys?: number;
continuationToken?: string;
delimiter?: string;
}): Promise<ListResult>
上传 JSON 对象。
await client.putJSON<T>(objectName: string, data: T, options?: {
meta?: Record<string, string>;
}): Promise<PutJSONResult>
下载并解析 JSON 对象。
await client.getJSON<T>(objectName: string, options?: {
range?: string;
}): Promise<GetJSONResult<T>>
生成签名 URL。
await client.sign(objectName: string, options?: {
method?: string;
expires?: number;
contentType?: string;
response?: Record<string, string>;
}): Promise<string>
创建 Unstorage Driver。
import { createOSSDriver } from '@ismartify/oss';
const driver = createOSSDriver(client)({
base: 'storage', // 基础路径
prefix: 'app' // 前缀
});
支持的 Unstorage 方法:
setItem(key, value) - 设置值getItem(key) - 获取值hasItem(key) - 检查是否存在removeItem(key) - 删除getKeys(base?) - 获取键列表clear(base?) - 清空watch(callback) - 不支持(返回空函数)// 上传用户头像
await client.put('avatars/user-123.jpg', imageBuffer, {
contentType: 'image/jpeg',
meta: { userId: '123' }
});
// 下载文件
const avatar = await client.get('avatars/user-123.jpg');
// 使用 Unstorage
const config = createStorage({
driver: createOSSDriver(client)({
base: 'config'
})
});
await config.setItem('app', { theme: 'dark', lang: 'zh' });
const settings = await config.getItem('app');
const client = new OSSClient({
region: 'oss-cn-shenzhen',
accessKeyId: 'YOUR_KEY',
accessKeySecret: 'YOUR_SECRET',
bucket: 'your-bucket',
endpoint: 'https://cdn.example.com'
});
const cache = createStorage({
driver: createOSSDriver(client)({
base: 'cache',
prefix: 'api'
})
});
await cache.setItem('users/123', userData);
const cached = await cache.getItem('users/123');
查看 demo/ 目录获取更多示例:
demo/simple-test.js - 基础功能测试demo/sign.js - 签名 URL 生成demo/custom-endpoint-demo.js - 自定义 Endpointdemo/unstorage-demo.js - Unstorage 集成运行示例:
node demo/simple-test.js
node demo/sign.js
node demo/unstorage-demo.js
# 安装依赖
npm install
# 运行测试
npm test
# 构建
npm run build
# 发布
npm run npm:publish
ISC
欢迎提交 Issue 和 Pull Request!
FAQs
轻量级的阿里云 OSS SDK,支持 V2 签名、自定义 Endpoint 和 Unstorage Driver。
The npm package @ismartify/oss receives a total of 2 weekly downloads. As such, @ismartify/oss popularity was classified as not popular.
We found that @ismartify/oss demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.