首页 > 编程语言 >tus-node-server 官方基于node 实现的tus server 1.0 发布

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

时间:2023-10-27 14:36:23浏览次数:33  
标签:node console tus upload server const

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
services:
  • 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',
  },
  one rror(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 官方基于node 实现的tus server 1.0 发布_github

 

说明

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

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

参考资料

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

标签:node,console,tus,upload,server,const
From: https://blog.51cto.com/rongfengliang/8056143

相关文章

  • SQL Server事务及隔离级别
    事务的并发操作可能出现的问题中文英文描述脏读DirtyReads事务2读到了事务1未提交的事务,事务1随后回滚,但事务2读到了事务1的“中间数据”。在ReadUncommitted隔离级别下会发生,其它级别不会。(update&read)丢失更新LostUpdates两个事务对同一个行分别进行......
  • graalvm 23.1.0 独立nodejs docker 镜像&简单试用
    graaljsdocker镜像很简单就是下载官方包,集成下,然后进行一些简单的配置DockerfileFROMdebian:bullseye-backportsLABELauthor="rongfengliang"LABELemail="[email protected]"WORKDIR/opt/RUN/bin/cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime\&&am......
  • FastAPI学习-16.响应状态码 status_code
    前言与指定响应模型的方式相同,你也可以在以下任意的_路径操作_中使用 status_code 参数来声明用于响应的HTTP状态码:@app.get()@app.post()@app.put()@app.delete()响应状态码fromfastapiimportFastAPIapp=FastAPI()@app.post("/items/",status_code=201)asyncdef......
  • Serverless 基础
    Serverless的基础概念云原生开发模型的一种,可使开发人员专注于构建和运行应用,而无需管理服务器。Serverless方案中仍然需要服务器,但它们已从应用开发人员的关注中抽离了出来。云提供商负责置备、维护和扩展服务器基础架构等例行工作开发人员可以简单地将代码打包到容器中进......
  • 每日一练:无感刷新页面(附可运行的前后端源码,前端vue,后端node)
    1、前言想象下,你正常在网页上浏览页面。突然弹出一个窗口,告诉你登录失效,跳回了登录页面,让你重新登录。你是不是很恼火。这时候无感刷新的作用就体现出来了。2、方案2.1redis设置过期时间在最新的技术当中,token一般都是在Redis服务器存着,设置过期时间。只要在有效时间内,重新发出请......
  • SQL Server常用命令
     --重建索引dbccdbreindex('表名','',90) --清除数据库日志use[数据库]selectFILE_ID,name,size,*fromsys.database_files--查询数据库及日志名称alterdatabase[数据库名称]setrecoverysimplewithno_waitalterdatabase[数据库名称]setrecoverysimple--简......
  • node开发一个接口详细步骤
    最近在做后台系统改版,由于目前接口还没出来,就自己用nodejs写了个简单的接口。我这里用的是nodejs+mysql的这里不讲nodejs和mysql的安装。这些基础略过。首先创建文件夹。cd进入文件。npminit进行初始化安装下面的包npminstallbody-parserexpressmysqlcors-S这里下......
  • node+mysql+express实现登录/注册/修改密码/删除用户 接口
    实现用户的注册、登录、修改密码、删除用户操作用到的数据库:nodecms;表:user目录结构:db目录下存放数据库操作语句:userSQL.js用户有关的操作语句router目录接口路由文件user.js用户接口路由connect.js数据库连接index.html前端测试页面index.js入口文件package.js......
  • cesium 加载geoserver wms服务
    代码如下//加载geoserverwmsvarwmslayer=newCesium.WebMapServiceImageryProvider({url:"http://localhost:8880/geoserver/postgis/wms",layers:'postgis:ceshi0606',parameters:{transparent:true,forma......
  • nmcli device status状态为unmanaged
    遇到报错:(devicelonotavailablebecausedeviceisstrictlyunmanaged)nmclidevicestatus查看设备状态nmcliconnectionshow状态为unmanaged[root@192~]#nmcliconnectionshowNAMEUUIDTYPEDEVICEens160cf32e4bc-e......