tus-node-server 官方基于node 实现的tus server 1.0 发布

tus-node-server 是基于typescript 开发的新的nodejs server,通过拆分为独立的包(file,s3,gcs, server )

包含的特性

  • 完全基于typescript 开发
  • 拆分为了独立的包
  • 提供了新的events 以及hooks
  • 升级了依赖包
  • 重新设计了存储
  • file 存储添加了过去扩展
  • 更好的周边集成(express,fastify。。。)

参考使用

  • s3
version: '3'
services:
  minio:
    image: minio/minio:RELEASE.2023-09-16T01-01-47Z
    ports:
      - "9000:9000"
      - "19001:19001"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
    command: server --console-address :19001 --quiet /data
  • app.js
const port = 1080
const datastore = new S3Store({
  partSize: 8 * 1024 * 1024, // 8MB
  s3ClientConfig: {
    bucket: process.env.AWS_BUCKET,
    region: process.env.AWS_REGION,
    endpoint: process.env.AWS_ENDPOINT,
    tls: process.env.AWS_TLS === 'true',
    credentials: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    },
    forcePathStyle: true,
  },
})
const server = new Server({
  path: '/files',
  datastore,
})
 
// New events system
server.on(EVENTS.POST_CREATE, (req, res, upload) => {
    console.log('POST_CREATE',upload)
 
})
server.on(EVENTS.POST_RECEIVE, (req, res, upload) => {
    console.log('POST_RECEIVE',upload)
})
server.on(EVENTS.POST_FINISH, (req, res, upload) => {
    console.log('POST_FINISH',upload)
})
server.on(EVENTS.POST_TERMINATE, (req, res, id) => {
    console.log('POST_TERMINATE',id)
})
server.listen({ host, port })
  • client.js
const { Server, EVENTS } = require('@tus/server')
const { S3Store } = require('@tus/s3-store')
require('dotenv').config()
const host = '0.0.0.0'
const fs = require('fs')
const tus = require('tus-js-client')
 
const path = `${__dirname}/my.mp4`
const file = fs.createReadStream(path)
 
const options = {
  endpoint: 'http://localhost:1080/files/',
  metadata: {
    filename: 'my.mp4',
    filetype: 'video/mp4',
  },
  onError(error) {
    console.error('An error occurred:')
    console.error(error)
    process.exitCode = 1
  },
  onProgress(bytesUploaded, bytesTotal) {
    const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2)
    console.log(bytesUploaded, bytesTotal, `${percentage}%`)
  },
  onSuccess() {
    console.log('Upload finished:', upload.url)
  },
}
 
const upload = new tus.Upload(file, options)
upload.start()
  • 效果

 

说明

目前来说tus-node-server 做为一个支持断点续传的解决方案还是很不错的,一个参考集成
对于客户端可以使用提供的周边工具,我们可以基于tus 的node server 或者golang 也是可以的,进行自己的定制调整
可以实现大文件的断点续传能力,node server 提供的扩展能力还是很不错的

参考资料

https://github.com/tus/tus-node-server
https://tus.io/blog/2023/09/04/tus-node-server-v100
https://github.com/tus/tus-js-client/blob/main/docs/api.md
https://github.com/tus/tus-node-server/tree/main/packages/server#servergetreq-res
https://github.com/tus/tus-node-server/issues/483

posted on   荣锋亮  阅读(94)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-09-19 使用 victoriametrics vmagent 解决 coroot prometheus 大量存储以及push 问题
2022-09-19 coroot 简单试用
2022-09-19 coroot 玩法简单说明
2022-09-19 coroot 开源微服务架构监控以及问题解决工具
2022-09-19 linux kernel 下载地址
2019-09-19 Traefik 2.0 tcp 路由试用
2018-09-19 stardog graphql 简单操作

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示