@capyclaw/asset-service
v0.1.2
Published
DSH 公共资产插件:sha256 对象仓库、/assets 路由、base64 上传与 content-type,向插件提供 ctx.assets。
Readme
@capyclaw/asset-service
DSH 公共资产插件。功能插件通过 ctx.assets 获得统一的 sha256 对象仓库和 /assets 路由。
使用
export const inject = ['assets']
export function apply(ctx) {
const app = ctx.serviceHost.createApp({ id: 'my-plugin' })
app.use(ctx.assets.routes())
}
// 或在插件内部写入
const asset = await ctx.assets.put(buffer, 'image/png')
// { id, key, url: '/assets/<sha256>', size, contentType }独立运行或测试:
import { createFileAssetStore, createAssetRoutes } from 'dsh-asset-service/src'
const store = createFileAssetStore({ dir: './assets' })路由归属
多个插件共用一个 service-host app 时,用 ctx.assets.mount(app) 只挂一次 /assets:
ctx.assets.mount(app, { store: assetStore })重复 mount 会被忽略;不要再手写 app.use(ctx.assets.routes())。
提供什么
createWorkspaceAssetStore({ storeClient, workId }):资产归当前 workcreateFileAssetStore({ dir }):本地目录后端createAssetRoutes({ assetStore, basePath }):GET/HEAD/assets/<id>、POST<basePath>/assetsctx.assets.put/get:默认 store 快捷方法
契约
- 资产按 sha256 去重,不可变
- url 固定为
/assets/<id>,可长期缓存 - 内容类型由上传方声明,读取时原样返回
